oracle 包声明,sql – 包声明的内容

您可以通过查询

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所建议的那样.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值