怎樣才能看到的軟件包和特定類型的描述詠歎調的含量(PL-SQL)的內容包聲明
例如,在包P1我有3個功能f1, f2, f3
?; 2個程序p1, p2
和2個變量v1, v2
。
我需要與2列的列表:一個用於名稱(f1, f2
等)和一個用於類型(函數,過程,變量等)。
怎樣才能看到的軟件包和特定類型的描述詠歎調的含量(PL-SQL)的內容包聲明
例如,在包P1我有3個功能f1, f2, f3
?; 2個程序p1, p2
和2個變量v1, v2
。
我需要與2列的列表:一個用於名稱(f1, f2
等)和一個用於類型(函數,過程,變量等)。
這並非易事!你必須通過行循環解析包裝規格,即
select *
from all_source
where owner = '<the package owner>'
and name = '<the package name>'
and type = 'PACKAGE'
order by line;
您可以通過查詢ALL_ARGUMENTS數據字典視圖,或它的兄弟USER_ARGUMENTS和DBA_ARGUMENTS找到包中的函數和過程的細節。
對於一個例子,我創建了下面的包:
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;
我然後跑了反對它下面的查詢:
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
在這裏你可以看到所有的參數在函數和過程我們的包裹。需要注意的是,有一個帶有每個的兩個函數的返回值的空參數名的額外條目。此外,沒有參數的程序有一個空參數名稱和零SEQUENCE
值的行。
所以,要列出所有的功能,你可以在這個視圖中,帶有空參數名稱和SEQUENCE
值不等於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
上市程序,是一個小棘手:
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
雖然這種做法似乎與過程和函數的工作,我不知道如何列出包範圍的變量,類型和封裝報頭內聲明的其他事情,而不解析包裝規範,如由@wweicker建議。