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