Функция компилируется, но при запуске ошибка: "PLS-00221: is not a procedure or is undefined"
Написал простейшую функцию:
create or replace function test_func(test_in in number) return number is
test_out number ;
BEGIN
test_out:=test_in;
RETURN test_out;
END;
Она компилируется. Но если пытаюсь её запустить:
BEGIN test_func(5); END;
то получаю следующую ошибку:
PLS-00221: 'TEST_FUNC' is not a procedure or is undefined
Что не так с моей функцией?
Свободный перевод вопроса Oracle function compiles successfully but throws error while executing PLS-00221: is not a procedure or is undefined от участника David
Ответы (1 шт):
Автор решения: 0xdb
→ Ссылка
С самой функцией всё в порядке.
Однако функция возвращает результат, и вызывать функцию можно только в том контексте, где этот результат может быть принят или присвоен. А именно: присвоение значения переменний, как актуальный параметр, в выражении, или в SQL запросе.
Вот несколько рабочих примеров вызова функции:
declare
ret int;
begin
ret := test_func (5);
dbms_output.put_line ('ret='||ret);
dbms_output.put_line ('test_func(6)='||test_func (6));
if test_func (7) != 0 then
dbms_output.put_line ('result of test_func is non zero');
end if;
end;
/
ret=5
test_func(6)=6
result of test_func is non zero
select test_func (9) as result
from dual
where test_func (9) > 0
/
RESULT
----------
9