Oracle Like 运算符在 Where 条件和解码
Oracle Like Operator in Where condition and decode
我正在尝试对来自多个 table 的 return 记录编写一个 PL-SQL 查询,并使用解码来允许空值比较,
PROCEDURE GetResults(FromDate DATE,pToDate DATE, DeptName VARCHAR2 DEFAULT NULL,p_ref OUT SYS_REFCURSOR ) IS
BEGIN
OPEN p_ref FOR
SELECT e.First_Name,e.LastName,e.Department
FROM
Employee e, Department d
Where e.JoiningDate >=FromDate
AND e.JoiningDate <=ToDate
AND NVL(e.Department,'~') = decode(DeptName,null,NVL(e.Department,'~'),DeptName
End GetResults
结果是 return 仅在 DeptName 与数据库值完全匹配的情况下,但我想要查询 return 一些东西
e.Department like '%DeptName%'
除了布尔逻辑之外不需要任何东西:
WHERE e.JoiningDate >= FromDate AND
e.JoiningDate <= ToDate AND
(DeptName IS NULL OR e.Department = DeptName)
如果您希望 NULL
参数 仅 匹配 NULL
值,请使用:
WHERE e.JoiningDate >= FromDate AND
e.JoiningDate <= ToDate AND
(DeptName IS NULL AND e.Department IS NULL OR
e.Department = DeptName
)
我还建议您为参数命名,这些名称更明显是参数。我经常使用 in_
或 out_
:
作为前缀
PROCEDURE GetResults (
in_FromDate DATE,
in_ToDate DATE,
in_DeptName VARCHAR2 DEFAULT NULL,
out_p_ref OUT SYS_REFCURSOR
) IS
我正在尝试对来自多个 table 的 return 记录编写一个 PL-SQL 查询,并使用解码来允许空值比较,
PROCEDURE GetResults(FromDate DATE,pToDate DATE, DeptName VARCHAR2 DEFAULT NULL,p_ref OUT SYS_REFCURSOR ) IS
BEGIN
OPEN p_ref FOR
SELECT e.First_Name,e.LastName,e.Department
FROM
Employee e, Department d
Where e.JoiningDate >=FromDate
AND e.JoiningDate <=ToDate
AND NVL(e.Department,'~') = decode(DeptName,null,NVL(e.Department,'~'),DeptName
End GetResults
结果是 return 仅在 DeptName 与数据库值完全匹配的情况下,但我想要查询 return 一些东西
e.Department like '%DeptName%'
除了布尔逻辑之外不需要任何东西:
WHERE e.JoiningDate >= FromDate AND
e.JoiningDate <= ToDate AND
(DeptName IS NULL OR e.Department = DeptName)
如果您希望 NULL
参数 仅 匹配 NULL
值,请使用:
WHERE e.JoiningDate >= FromDate AND
e.JoiningDate <= ToDate AND
(DeptName IS NULL AND e.Department IS NULL OR
e.Department = DeptName
)
我还建议您为参数命名,这些名称更明显是参数。我经常使用 in_
或 out_
:
PROCEDURE GetResults (
in_FromDate DATE,
in_ToDate DATE,
in_DeptName VARCHAR2 DEFAULT NULL,
out_p_ref OUT SYS_REFCURSOR
) IS