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