gpt4 book ai didi

oracle - ALL_PROCEDURES View 不显示 PROCEDURE_NAME

转载 作者:行者123 更新时间:2023-12-01 23:46:52 24 4
gpt4 key购买 nike

为什么我在 user_procedures View 中看不到我的过程?为什么 all_procedures View 上的 procedure_name 过滤器不返回任何行。

这个问题主要是为了帮助那些正在寻找类似问题的人。我希望任何寻找此类问题的人都能在这里找到答案。

测试用例:

SQL> show user
USER is "LALIT"
SQL> CREATE OR REPLACE
2 PROCEDURE new_proc
3 AS
4 BEGIN
5 NULL;
6 END;
7 /

Procedure created.

SQL>
SQL> SELECT owner,
2 object_name,
3 procedure_name,
4 object_type
5 FROM all_procedures
6 WHERE owner='LALIT'
7 AND procedure_name='NEW_PROC';

no rows selected

SQL>

最佳答案

来自 documentation ,

ALL_PROCEDURES lists all functions and procedures, along with associated properties. For example, ALL_PROCEDURES indicates whether or not a function is pipelined, parallel enabled or an aggregate function. If a function is pipelined or an aggregate function, the associated implementation type (if any) is also identified.

它没有阐明它是否会以相同的方式列出STAND ALONE PROCEDURE 和包装在PACKAGE 中的过程,还是以不同的方式考虑。因为,procedure_name 不会列出上述问题的测试用例中所见的独立过程的名称。

PROCEDURE_NAME 列将只有作为 PACKAGE 一部分的过程的过程名称。对于独立程序,您需要使用 OBJECT_NAME

SQL> show user
USER is "LALIT"
SQL> CREATE OR REPLACE
2 PROCEDURE new_proc
3 AS
4 BEGIN
5 NULL;
6 END;
7 /

Procedure created.

SQL>
SQL> SELECT owner,
2 object_name,
3 procedure_name,
4 object_type
5 FROM all_procedures
6 WHERE owner='LALIT'
7 AND object_name='NEW_PROC';

OWNER OBJECT_NAME PROCEDURE_NAME OBJECT_TYPE
----- --------------- --------------- ---------------
LALIT NEW_PROC PROCEDURE

SQL>

只有当它被包装在一个包中时,您才能使用 procedure_name 获取过程列表。

SQL> -- package
SQL> CREATE OR REPLACE
2 PACKAGE new_pack
3 IS
4 PROCEDURE new_proc;
5 END new_pack;
6 /

Package created.

SQL>
SQL> -- package body with a procedure
SQL> CREATE OR REPLACE
2 PACKAGE BODY new_pack
3 IS
4 PROCEDURE new_proc
5 IS
6 BEGIN
7 NULL;
8 END;
9 END new_pack;
10 /

Package body created.

SQL> SELECT owner,
2 object_name,
3 procedure_name,
4 object_type
5 FROM all_procedures
6 WHERE owner='LALIT'
7 AND procedure_name='NEW_PROC';

OWNER OBJECT_NAME PROCEDURE_NAME OBJECT_TYPE
----- --------------- --------------- -----------
LALIT NEW_PACK NEW_PROC PACKAGE

SQL>

现在您可以将 procedure_name 视为实际过程,将 object_name 视为 package_name。

当然,大多数情况下在生产系统中我们会有包,而不是独立的过程。但是,在测试和演示时,我们会编译和运行独立的程序。因此,最好了解 Oracle 如何维护 *_PROCEDURES View 中的信息。

关于oracle - ALL_PROCEDURES View 不显示 PROCEDURE_NAME,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28672956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com