sql - 包声明的内容

标签 sql oracle plsql

如何查看包和具体类型的描述 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/

相关文章:

oracle - Entity Framework 和 Oracle 客户端 - 存储过程问题

oracle - SQLPlus - 从 PL/SQL block 假脱机到多个文件

php - 更新 php-mysql 中的表

php - 有什么方法可以减小文本的大小?

sql - 使用 CONNECT BY 在分层查询的每个级别获取计数/总数

database - 多少个数据库索引太多了?

c# - 如何在代码优先 EF5 中使用真正的自引用实体?

mysql - SQL:JOIN 和其他表的基础知识

oracle - oracle 11g中生成样本数据

mysql - SHOW CREATE PROCEDURE 与 perl DBI 不一致的结果