Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Saat Ini Menjalankan Nama Prosedur dalam Paket

Di 12c, nama subprogram saat ini hanya:

utl_call_stack.subprogram(1)(2);

Paket saat ini juga bisa didapatkan dari

utl_call_stack.subprogram(1)(1);

tetapi biasanya lebih mudah menggunakan $$plsql_unit . Anda juga bisa mendapatkan nama yang memenuhi syarat (package.procedure ) sebagai:

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

Namun , Saya tidak dapat memikirkan situasi apa pun di mana prosedur atau fungsi (atau metode objek) menginginkan namanya sendiri. Fungsi ini sebagian besar berguna dalam prosedur pencatatan, dalam hal ini 'siapa yang menelepon saya?' kode harus di logger, dan tidak diulang di setiap hal yang menyebutnya. Oleh karena itu, saya sangat menyarankan untuk menghindari 'siapa saya?' logika dalam prosedur. Sebagai gantinya, letakkan sesuatu seperti ini di logger Anda (memerlukan 12.1 atau lebih baru):

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;

Sayangnya ini sedikit lebih rumit dalam 11g karena Anda harus mengurai dbms_utility.format_call_stack , dan karena ini hanya memberi Anda nama paket dan nomor baris (dalam string teks yang dibatasi linefeed), Anda kemudian harus menanyakan all_source untuk menemukan nama subprogram.

Saya dapat memposting beberapa kode 11g jika Anda menjelaskan untuk apa itu. Di logger 11g saya, saya merasa berguna untuk menangkap dbms_utility.format_error_backtrace serta dbms_utility.format_call_stack tergantung pada sqlcode dll, jadi ada banyak logika yang khusus untuk logging, yang mungkin tidak Anda perlukan jika Anda hanya ingin menangkap nama prosedur saat ini karena alasan lain.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbarui permintaan jika pernyataan untuk Oracle

  2. Apa yang dimaksud dengan select count(1) dari table_name pada tabel database apa pun?

  3. Oracle:Pilih Dari Tipe Data Rekam

  4. Fungsi yang setara untuk DATEADD() di Oracle

  5. SIGN() Fungsi di Oracle