Какие изменения проведены в функции OWA_UTIL.who_called_me в версии 18c?
OWA_UTIL.WHO_CALLED_ME(
owner OUT VARCHAR2,
name OUT VARCHAR2,
lineno OUT NUMBER,
caller_t OUT VARCHAR2);
Данная процедура возвращает информацию в виде OUT параметров о вызвавшем ее блоке кода PL/SQL.
Есть ли какие-либо изменения, произошедшие в версии 18c?
Слышал, что переменная с именем теперь будет иметь имя пакета вместе с именем процедуры, ранее это было просто имя процедуры или функции.
Свободный перевод вопроса What are the changes done in OWA_UTIL.who_called_me as part of 18C upgrade? от участника @Shashi
Ответы (1 шт):
Описание параметра name ничем не отличается начиная с версии 11g:
name
The name of the program unit. This is the name of the package, if the calling program unit is wrapped in a package, or the name of the procedure or function if the calling program unit is a standalone procedure or function. If the calling program unit is part of an anonymous block, this is NULL.
То есть, в случае пакетированных функций/процедур параметер name должeн содержать только имя пакета.
Тестоваый пакет:
SQL> create or replace package pack1 as
2 function func1 return varchar2;
3 procedure proc1;
4 end pack1;
5 /
SQL> create or replace package body pack1 as
2 function func1 return varchar2 as
3 type callerinfo is record (o varchar2 (32), n varchar2 (32), l int, c varchar2 (64));
4 c callerinfo;
5 begin
6 owa_util.who_called_me (c.o, c.n, c.l, c.c);
7 return 'Called by '||c.c||' '||c.o||'.'||c.n||' line '||c.l;
8 end func1;
9
10 procedure proc1 as
11 begin
12 dbms_output.put_line (pack1.func1);
13 end proc1;
14 END pack1;
15 /
SQL> exec pack1.proc1;
Вывод в версии 11.2.0.1:
Called by PACKAGE BODY DB.PACK1 line 12
Вывод в версии 12.2.0.1:
Called by PACKAGE BODY DB.PACK1.PROC1 line 12
В версиях 18c и 19c вывод не отличается от 12c. Выглядит так, что начиная с 12c было добавлено имя конкретной процедуры/функции в пакете, но этo изменение не было документировано.