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

Ambil daftar prosedur/fungsi pribadi dari badan paket

Sifat dari fungsi pribadi adalah bahwa mereka bersifat pribadi. Tidak ada tampilan kamus data yang mengeksposnya secara default. USER_PROCEDURES dan USER_ARGUMENTS hanya menampilkan informasi untuk prosedur publik (yang didefinisikan dalam spesifikasi paket0.

Namun, kami dapat memperoleh informasi tentang mereka menggunakan PL/SCOPE, tetapi untuk melakukannya memerlukan sedikit usaha tambahan:

  1. SQL> alter session set plscope_settings='IDENTIFIERS:ALL';
  2. SQL> alter package your_package compile body;

Sekarang Anda dapat menemukan unit program pribadi Anda dengan kueri ini:

select ui.type, ui.name, ui.usage_id
from user_identifiers ui
where ui.object_name = 'YOUR_PACKAGE'
and ui.usage = 'DEFINITION'
and ui.type in ('PROCEDURE', 'FUNCTION')
minus
( select 'PROCEDURE', upr.procedure_name 
  from user_procedures upr
  where upr.object_name = 'YOUR_PACKAGE'
  union
  select 'FUNCTION', uarg.object_name
  from user_arguments uarg
  where uarg.package_name = 'YOUR_PACKAGE'
  and uarg.position = 0 
);

Untuk mendapatkan argumen dari prosedur pribadi, masukkan USAGE_ID dari kueri sebelumnya ke kueri ini:

select ui.name
       , ui.type
       , ui.usage_id
       , ui2.type as param_datatype
from user_identifiers ui
     left join user_identifiers ui2
        on ui2.usage_context_id = ui.usage_id 
where ui.object_name = 'YOUR_PACKAGE'
and ui.usage = 'DECLARATION'
and ui.usage_context_id = :private_proc_usage_id
/

Ini harus bergabung dengan kiri karena user_identifiers memiliki entri tipe data untuk tipe data skalar (karakter, angka, tanggal, gumpalan) tetapi bukan tipe data kompleks (tipe xml, tipe yang ditentukan pengguna).

Kita bisa mendapatkan banyak informasi tentang prosedur dari PL/SCOPE, meskipun tidak semudah menanyakan USER_PROCEDURES atau USER_ARGUMENTS (sebenarnya, ini sangat kikuk). Temukan lebih banyak lagi. Ketahuilah bahwa data PL/SCOPE disimpan di tablespace SYSAUX, jadi jangan masuk ke air panas dengan DBA Anda!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah ada cara untuk memberikan pesan kesalahan yang mudah digunakan pada pelanggaran batasan?

  2. FLOOR() Fungsi di Oracle

  3. Cara Membatasi Hasil di Oracle

  4. Apakah pernyataan DDL selalu memberi Anda komit implisit, atau bisakah Anda mendapatkan rollback implisit?

  5. HQL adalah null Dan !=null pada kolom Oracle