Oracle - "bad bind variable" 函数内有绑定变量

Oracle - "bad bind variable" with bind variable inside function

为什么这个代码:

with
function qry(v in varchar2) return varchar2 is
   begin
      return owa_util.ite(v like ('%' || lower(:param) || '%'),'Y','N');
   end;
select * from my_table where qry(my_col) = 'Y'

给我以下错误:

ORA-06553: PLS-49: bad bind variable 'PARAM'
06553. 00000 -  "PLS-%s: %s"
*Cause:    
*Action:
Error at Line: 6 Column: 46

我假设您已经声明了 param 绑定变量;如果你还没有那么这是你的第一个问题。

您不需要函数:

select *
from   my_table
where  my_col LIKE '%' || LOWER( :param ) || '%'

如果你真的想要一个函数(不要这样做,因为它会阻止你在列上使用索引)然后将绑定值作为参数传递:

WITH FUNCTION qry(
    value  IN VARCHAR2,
    filter IN VARCHAR2
  ) RETURN VARCHAR2
  IS
  BEGIN
    RETURN CASE WHEN v LIKE '%' || lower(filter) || '%' THEN 'Y' ELSE 'N' END;
  END;
SELECT *
FROM   my_table
WHERE  qry(my_col, :param) = 'Y'