1

Why does this code:

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'

Gives me the following error:

ORA-06553: PLS-49: bad bind variable 'PARAM'
06553. 00000 -  "PLS-%s: %s"
*Cause:    
*Action:
Error at Line: 6 Column: 46
user5507535
  • 1,580
  • 1
  • 18
  • 39

1 Answers1

2

I am assuming that you have declared the param bind variable; if you haven't then that is your first problem.

You do not need a function:

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

If you really want a function (don't as it would prevent you using an index on the column) then pass the bind value as an argument:

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'
MT0
  • 143,790
  • 11
  • 59
  • 117