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

isi deklarasi paket

Anda dapat menemukan detail tentang fungsi dan prosedur dalam sebuah paket dengan menanyakan ALL_ARGUMENTS tampilan kamus data, atau saudaranya USER_ARGUMENTS dan DBA_ARGUMENTS.

Sebagai contoh saya membuat paket berikut:

CREATE OR REPLACE PACKAGE demo AS
    PROCEDURE p_none;
    PROCEDURE p_two(a INTEGER, b INTEGER);

    FUNCTION f_none RETURN INTEGER;
    FUNCTION f_three(c INTEGER, q INTEGER, z INTEGER) RETURN INTEGER;
END;

Saya kemudian menjalankan kueri berikut untuk menentangnya:

SQL> select object_name, argument_name, sequence, in_out
  2    from all_arguments
  3   where package_name = 'DEMO'
  4   order by object_name, sequence;

OBJECT_NAME                    ARGUMENT_NAME                    SEQUENCE IN_OUT
------------------------------ ------------------------------ ---------- ---------
F_NONE                                                                 1 OUT
F_THREE                                                                1 OUT
F_THREE                        C                                       2 IN
F_THREE                        Q                                       3 IN
F_THREE                        Z                                       4 IN
P_NONE                                                                 0 IN
P_TWO                          A                                       1 IN
P_TWO                          B                                       2 IN

Di sini Anda dapat melihat semua argumen untuk fungsi dan prosedur dalam paket kami. Perhatikan bahwa ada entri tambahan dengan nama argumen nol untuk nilai yang dikembalikan untuk masing-masing dari dua fungsi. Juga, prosedur yang tidak memiliki argumen memiliki baris dengan nama argumen nol dan SEQUENCE nol nilai.

Jadi, untuk membuat daftar semua fungsi, Anda dapat mencari semua entri dalam tampilan ini dengan nama argumen null dan SEQUENCE nilai tidak sama dengan 0:

SQL> select distinct object_name
  2    from all_arguments
  3   where package_name = 'DEMO'
  4     and argument_name is null
  5     and sequence != 0;

OBJECT_NAME
------------------------------
F_THREE
F_NONE

Prosedur daftar dengan cara yang sama sedikit lebih rumit:

SQL> select distinct object_name
  2    from all_arguments a1
  3   where package_name = 'DEMO'
  4     and (   sequence = 0
  5          or not exists (select 0
  6                           from all_arguments a2
  7                          where a2.package_name = 'DEMO'
  8                            and a2.object_name = a1.object_name
  9                            and a2.argument_name is null));

OBJECT_NAME
------------------------------
P_TWO
P_NONE

Meskipun pendekatan ini tampaknya bekerja dengan prosedur dan fungsi, saya tidak tahu cara membuat daftar variabel cakupan paket, jenis, dan hal-hal lain yang dideklarasikan dalam header paket tanpa menguraikan spesifikasi paket, seperti yang disarankan oleh @wweicker.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan memuat oci8.so dengan server Ubuntu 17.04 php 7 dan Apache2

  2. Bagaimana cara menggunakan XPath dengan variabel di Oracle XMLTable?

  3. Sintaks Oracle yang tersisa bergabung dengan tiga atau lebih tabel

  4. Kursor dalam prosedur mengembalikan lebih banyak nilai daripada kueri

  5. Apakah ODP.NET dapat didistribusikan kembali?