Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Nazwa aktualnie wykonywanej procedury w ramach pakietu

W 12c aktualna nazwa podprogramu to po prostu:

utl_call_stack.subprogram(1)(2);

Aktualny pakiet można również pobrać z

utl_call_stack.subprogram(1)(1);

ale generalnie łatwiej jest po prostu użyć $$plsql_unit . Możesz również uzyskać kwalifikowaną nazwę (package.procedure ) jako:

utl_call_stack.concatenate_subprogram(utl_call_stack.subprogram(1));

Jednak , nie przychodzi mi do głowy żadna sytuacja, w której procedura lub funkcja (lub metoda obiektu) chciałaby mieć własną nazwę. Ta funkcja jest szczególnie przydatna w procedurze rejestrowania, w takim przypadku „kto do mnie dzwonił?” kod powinien znajdować się w rejestratorze, a nie powtarzać się w każdej rzeczy, która go wywołuje. Dlatego zdecydowanie sugerowałbym unikanie kim jestem? logika w procedurach. Zamiast tego umieść coś takiego w swoim rejestratorze (wymaga wersji 12.1 lub nowszej):

create or replace procedure logdemo
as
    k_calling_package constant varchar2(128) := utl_call_stack.subprogram(2)(1);
    k_calling_subprog constant varchar2(128) := utl_call_stack.subprogram(2)(2);
begin
    dbms_output.put_line
    ( $$plsql_unit ||
      ' called from package '||k_calling_package||', subprogram '||k_calling_subprog );
end logdemo;

Niestety w 11g jest to trochę bardziej skomplikowane, ponieważ musisz przeanalizować dbms_utility.format_call_stack , a ponieważ daje to tylko nazwę pakietu i numer wiersza (w ciągu tekstowym oddzielonym wysuwem wiersza), musisz wykonać zapytanie all_source aby znaleźć nazwę podprogramu.

Mogę opublikować kod 11g, jeśli wyjaśnisz, do czego to służy. W moim 11g loggerze uznałem za przydatne przechwytywanie dbms_utility.format_error_backtrace jak również dbms_utility.format_call_stack w zależności od sqlcode itp., więc istnieje garść logiki, która jest specyficzna dla rejestrowania, której możesz nie potrzebować, jeśli chcesz przechwycić bieżącą nazwę procedury z jakiegoś innego powodu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sql Sortuj według w wielu kolumnach

  2. Okrągła data do 10 minut interwału

  3. Radzenie sobie z dużymi danymi JSON zwracanymi przez Web API

  4. Muszę utworzyć widok, który wstępnie łączy trzy tabele, w tym wszystkie rekordy z tabel uczniów i kursów (pokazane poniżej)

  5. Jak unieważnić instrukcję SQL w obszarze Oracle SQL, aby podczas zbierania statystyk powstał nowy plan?