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.