Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Oracle SQL Developer包中使用LOWER/UPPER_Sql_Vb.net_Plsql - Fatal编程技术网

如何在Oracle SQL Developer包中使用LOWER/UPPER

如何在Oracle SQL Developer包中使用LOWER/UPPER,sql,vb.net,plsql,Sql,Vb.net,Plsql,我已经在Oracle SQL Developer中为我在VIsual Studio 2013中创建的站点创建了一个SQL包。该包基本上从搜索框中获取输入,并根据搜索查找数据库表中的所有详细信息,然后将其返回到表中的站点 我知道这听起来可能很简单,但我有点卡住了,但我正在尝试让用户使用大写或小写字母进行搜索,以确保返回数据,因为在我搜索时,它必须匹配数据在表中的存储方式,这对用户不友好 请有人帮助我在包/SQL中的什么位置进行更改,以便用户可以使用大写或小写字母 我的包裹代码 create or

我已经在Oracle SQL Developer中为我在VIsual Studio 2013中创建的站点创建了一个SQL包。该包基本上从搜索框中获取输入,并根据搜索查找数据库表中的所有详细信息,然后将其返回到表中的站点

我知道这听起来可能很简单,但我有点卡住了,但我正在尝试让用户使用大写或小写字母进行搜索,以确保返回数据,因为在我搜索时,它必须匹配数据在表中的存储方式,这对用户不友好

请有人帮助我在包/SQL中的什么位置进行更改,以便用户可以使用大写或小写字母

我的包裹代码

create or replace
PACKAGE BODY USER_PRO AS


procedure emp_pro_search
(
  get_emp_details OUT SYS_REFCURSOR,
    p_login_search IN varchar2,
    p_firstname_search IN varchar2,
    p_surname_search IN varchar2,
    p_empnumb_search IN varchar2,
    p_prolist_search IN varchar2
)
IS
l_login_clause VARCHAR2(255);
l_firstname_clause VARCHAR2(255);
l_surname_clause VARCHAR2(255);
l_empnumb_clause VARCHAR2(255);
l_prolist_clause VARCHAR2(255);
BEGIN

IF p_login_search IS NOT NULL THEN
  l_login_clause := ' AND LOGIN =''' || p_login_search ||'''';
END IF;

IF p_firstname_search IS NOT NULL THEN
l_firstname_clause := ' AND FIRSTNAME =''' || p_firstname_search ||'''';
END IF;

IF p_surname_search IS NOT NULL THEN
l_surname_clause := ' AND SURNAME =''' || p_surname_search ||'''';
END IF;

IF p_empnumb_search IS NOT NULL THEN
l_empnumb_clause := ' AND EMP_NUMB =''' || p_empnumb_search ||'''';
END IF;

IF p_prolist_search IS NOT NULL THEN
l_prolist_clause := ' AND PRO_LIST =''' || p_prolist_search ||'''';
END IF;

OPEN get_user_details FOR
 'SELECT login, emp_id, surname, forename, middlename, date_of_birth, emp_numb, position, ' || 
      'FROM  my_employment_table ' ||
      ' WHERE 1 = 1 ' ||
     l_login_clause ||
     l_firstname_clause ||
     l_surname_clause ||
     l_empnumb_clause ||
     l_prolist_clause ||
     'ORDER BY surname ';

END emp_pro_search;
这是我调用包的类

 Public Shared Function SearchResults(ByVal sLogin As String, ByVal sfirstName As String, ByVal slastName As String, ByVal sempNumber As String, ByVal sproList As String) As DataSet

    Dim oraConnect As New OracleConnection
    oraConnect.ConnectionString = ConfigurationManager.ConnectionStrings("mydatabase").ConnectionString

    Dim p_login_search As New OracleParameter
    p_login_search.Direction = ParameterDirection.Input
    p_login_search.OracleDbType = OracleDbType.Varchar2
    p_login_search.Value = sLoginid

    Dim p_firstname_search As New OracleParameter
    p_firstname_search.Direction = ParameterDirection.Input
    p_firstname_search.OracleDbType = OracleDbType.Varchar2
    p_firstname_search.Value = sfirstName

    Dim p_surname_search As New OracleParameter
    p_surname_search.Direction = ParameterDirection.Input
    p_surname_search.OracleDbType = OracleDbType.Varchar2
    p_surname_search.Value = slastName

    Dim p_empnumb_search As New OracleParameter
    p_empnumb_search.Direction = ParameterDirection.Input
    p_empnumb_search.OracleDbType = OracleDbType.Varchar2
    p_empnumb_search.Value = sEsrnumber

    Dim p_prolist_search As New OracleParameter
    p_prolist_search.Direction = ParameterDirection.Input
    p_prolist_search.OracleDbType = OracleDbType.Varchar2
    p_prolist_search.Value = sProfnumber

    Dim oraCommand As New OracleCommand
    oraCommand.Connection = oraConnect
    oraCommand.CommandType = Data.CommandType.StoredProcedure
    oraCommand.CommandText = "USER_PRO.EMP_PRO_SEARCH"


    oraCommand.Parameters.Add(New OracleParameter("p_RefCursor", OracleDbType.RefCursor, 0, ParameterDirection.Output, False, CType(0, Byte), CType(0, Byte), "", DataRowVersion.Current, Nothing))
    oraCommand.Parameters.Add(p_login_search)
    oraCommand.Parameters.Add(p_firstname_search)
    oraCommand.Parameters.Add(p_surname_search)
    oraCommand.Parameters.Add(p_empnumb_search)
    oraCommand.Parameters.Add(p_prolist_search)

    Dim da As New OracleDataAdapter(oraCommand)
    Dim ds As New DataSet
    da.Fill(ds)

    Return ds
End Function

由于quotes中的所有内容在SQL中都区分大小写,要执行不区分大小写的搜索,方法是强制搜索条件和数据使用大写/小写:

create or replace
PACKAGE BODY USER_PRO AS


procedure emp_pro_search
(
  get_emp_details OUT SYS_REFCURSOR,
    p_login_search IN varchar2,
    p_firstname_search IN varchar2,
    p_surname_search IN varchar2,
    p_empnumb_search IN varchar2,
    p_prolist_search IN varchar2
)
IS
l_login_clause VARCHAR2(255);
l_firstname_clause VARCHAR2(255);
l_surname_clause VARCHAR2(255);
l_empnumb_clause VARCHAR2(255);
l_prolist_clause VARCHAR2(255);
BEGIN

IF p_login_search IS NOT NULL THEN
  l_login_clause := ' AND UPPER(LOGIN) =''' || UPPER(p_login_search) ||'''';
END IF;

IF p_firstname_search IS NOT NULL THEN
l_firstname_clause := ' AND UPPER(FIRSTNAME) =''' || UPPER(p_firstname_search) ||'''';
END IF;

IF p_surname_search IS NOT NULL THEN
l_surname_clause := ' AND UPPER(SURNAME) =''' || UPPER(p_surname_search) ||'''';
END IF;

IF p_empnumb_search IS NOT NULL THEN
l_empnumb_clause := ' AND EMP_NUMB =''' || p_empnumb_search ||'''';
END IF;

IF p_prolist_search IS NOT NULL THEN
l_prolist_clause := ' AND PRO_LIST =''' || p_prolist_search ||'''';
END IF;
我没有为Prolist添加上限子句-如果这是一个varchar字段,您可以像我对first name/last所做的那样更改它

另一点要注意-此搜索仅适用于精确匹配。如果不想强制精确匹配,请添加%通配符运算符

OPEN get_user_details FOR
 'SELECT login, emp_id, surname, forename, middlename, date_of_birth, emp_numb, position, ' || 
      'FROM  my_employment_table ' ||
      ' WHERE 1 = 1 ' ||
     l_login_clause ||
     l_firstname_clause ||
     l_surname_clause ||
     l_empnumb_clause ||
     l_prolist_clause ||
     'ORDER BY surname ';

END emp_pro_search;