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'
为什么这个代码:
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'