2 часа просидел над отладкой простейшего кода, не замечая подводного камня.
Допустим:
Итого: имена переменных пакета лучше начинать с префикса, либо использовать явное указание принадлежности переменной пакету.
Допустим:
create or replace package VARTEST is BANNER varchar2(255); procedure test (p_cur out sys_refcursor); end VARTEST; create or replace package body VARTEST is procedure test (p_cur out sys_refcursor) is begin open p_cur for select count(*) from v$version v where v.BANNER = BANNER; end test; end VARTEST;Вызовем-ка функцию
begin VARTEST.BANNER := 'some awsome text'; vartest.test(p_cur => :p_cur); end; -------------- count(*) 5Результат казался неожиданным, пока (случайно!) не выполнил запрос
select * from v$version v where v.BANNER = BANNER;Запрос, на удивление, выполнился и честно вернул всё содержимое вьюхи. Т.е. BANNER - это в данном случае имя поля, а не переменная пакета.
Итого: имена переменных пакета лучше начинать с префикса, либо использовать явное указание принадлежности переменной пакету.
Комментариев нет :
Отправить комментарий