ALL_PROCEDURES 视图不显示 PROCEDURE_NAME
ALL_PROCEDURES view doesn't show the PROCEDURE_NAME
为什么我在 user_procedures
视图中看不到我的程序?为什么 all_procedures
视图 returns 上的 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.
它没有说明它是否会以相同的方式列出 独立程序 和包装在 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 视图 .
中的信息是件好事
为什么我在 user_procedures
视图中看不到我的程序?为什么 all_procedures
视图 returns 上的 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.
它没有说明它是否会以相同的方式列出 独立程序 和包装在 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 视图 .
中的信息是件好事