首页 > 解决方案 > Oracle - 函数内带有绑定变量的“错误绑定变量”

问题描述

为什么这段代码:

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

标签: sqloraclefunctionoracle19cbind-variables

解决方案


我假设您已经声明了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'

推荐阅读