如何查看包和具体类型的描述 aria 的内容?(pl sql)
例如在包 p1 中,我有 3 个函数 f1, f2, f3
; 2道工序p1, p2
和 2 个变量 v1, v2
.
我需要一个包含 2 列的列表:一列用于名称(f1, f2
等),另一列用于类型(函数、过程、变量等)。
最佳答案
您可以通过查询 ALL_ARGUMENTS 找到有关包中的函数和过程的详细信息。数据字典 View ,或其兄弟 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> 选择对象名称、参数名称、序列、输入输出
2 来自 all_arguments
3 其中 package_name = 'DEMO'
4 order by object_name, sequence;
OBJECT_NAME ARGUMENT_NAME SEQUENCE IN_OUT
------------------------------ --------------------- ---------- ---------- ---------
F_NONE 1 输出
F_THREE 1 OUT
F_THREE C 2 IN
F_THREE Q 3 IN
F_THREE Z 4 英寸
P_NONE 0 输入
P_TWO A 1 IN
P_TWO B 2 输入
在这里您可以看到我们包中的函数和过程的所有参数。请注意,对于这两个函数中的每一个的返回值,都有一个带有空参数名称的额外条目。此外,没有参数的过程有一个参数名称为空且为零的行
SEQUENCE
值(value)。因此,要列出所有函数,您可以在此 View 中使用空参数名称和
SEQUENCE
搜索所有条目。值不等于 0:SQL> 选择不同的 object_name
2 来自 all_arguments
3 其中 package_name = 'DEMO'
4 并且argument_name 为空
5 和序列 != 0;
OBJECT_NAME
------------------------------
F_THREE
F_NONE
以类似的方式列出过程有点棘手:
SQL> 选择不同的 object_name
2 来自 all_arguments a1
3 其中 package_name = 'DEMO'
4 和 ( 序列 = 0
5 或不存在(选择 0
6 来自 all_arguments a2
7 where a2.package_name = 'DEMO'
8 和 a2.object_name = a1.object_name
9 并且 a2.argument_name 为空));
OBJECT_NAME
------------------------------
P_TWO
P_NONE
虽然这种方法似乎适用于过程和函数,但我不知道如何在不解析包规范的情况下列出包头中声明的包范围变量、类型和其他内容,正如@wweicker 所建议的那样。
关于sql - 包声明的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8075727/