Когда вы говорите, что вы «объявили» функцию, вы имеете в виду вот так?
declare
function f (p varchar2) return varchar2
is
begin
...
end;
begin
open p_cursor for select * from employee where emp_name = function(ssn);
...
end;
Вы не можете использовать такую функцию в SQL. Вам нужно будет создать функцию в базе данных, чтобы ее можно было использовать вне программы PL/SQL - например:
create or replace function f (p varchar2) return varchar2
is
begin
...
end;
Или, если вы создаете пакет, вы можете сделать публичную функцию пакета следующим образом:
create or replace package pkg is
function f (p varchar2) return varchar2;
...
end;
Затем его можно использовать в другом коде:
open p_cursor for select * from employee where emp_name = pkg.f(ssn);