我创建了一个过程:
create or replace procedure gg as
begin
insert into book values ('prashant','prashant','prashant');
commit;
end;
/过程已创建successfully.Now我想检查相应过程的包名,但我无法这样做。
我使用下面的查询:
> SELECT *
FROM SYS.DBA_PROCEDURES
WHERE procedure_name ='gg';它提供了0行selected.Please帮助。
发布于 2015-02-05 21:09:53
备注请查看更新部分以获取正确答案。
在DBA_PROCEDURES视图中,过程名称不能为小写。使用大写,或应用upper函数。
SELECT *
FROM SYS.DBA_PROCEDURES
WHERE procedure_name ='GG';更新
唯一可以使用小写的名称的情况是,在编译时用双引号将其括起来。
例如,
SQL> CREATE OR REPLACE
2 PROCEDURE "p"
3 AS
4 BEGIN
5 NULL;
6 END;
7 /
Procedure created.
SQL> SELECT object_name, procedure_name, object_type FROM user_procedures where procedure_name='p';
no rows selected
SQL>但是上面的视图仍然不会返回PROCEDURE_NAME.的任何结果
Reason
PROCEDURE_NAME列将只包含属于包一部分的过程的过程名称。对于独立过程,您需要使用OBJECT_NAME.
SQL> -- stand alone procedure in lower case
SQL> CREATE OR REPLACE
2 PROCEDURE "p"
3 AS
4 BEGIN
5 NULL;
6 END;
7 /
Procedure created.
SQL>
SQL> -- package
SQL> CREATE OR REPLACE
2 PACKAGE test_p
3 IS
4 PROCEDURE p;
5 END test_p;
6 /
Package created.
SQL>
SQL> -- package body with a procedure
SQL> CREATE OR REPLACE
2 PACKAGE BODY test_p
3 IS
4 PROCEDURE p
5 IS
6 BEGIN
7 NULL;
8 END;
9 END test_p;
10 /
Package body created.
SQL>
SQL> SELECT object_name, procedure_name, object_type FROM user_procedures;
OBJECT_NAME PROCEDURE_NAME OBJECT_TYPE
--------------- --------------- ---------------
TEST_P P PACKAGE
p PROCEDURE
TEST_P PACKAGE
SQL>因此,正如您所看到的,procedure_name仅具有package's procedure,而stand-alone procedure仅在object_name下列出。
发布于 2017-07-21 12:33:27
我使用的查询是:
SELECT * FROM User_Procedures WHERE NVL(Procedure_Name,Object_Name) = 'PROCNAME';https://stackoverflow.com/questions/28343972
复制相似问题