在DBA_PROCEDURES视图中找不到过程



我创建了一个过程:

create or replace procedure gg as
begin
insert into book values ('prashant','prashant','prashant');
commit;
end;
/

过程已成功创建。现在我想检查相应程序的包名称,但我无法这样做。

我正在使用以下查询:

 > SELECT *
        FROM SYS.DBA_PROCEDURES
        WHERE procedure_name ='gg';

它选择了0行。请帮忙。

注意请查看更新部分以获得正确答案。

在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的任何结果。

原因

PROCEDURE_NAME列将仅具有属于PACKAGE的过程的过程名称。对于独立程序,您需要使用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下。

我使用的查询是:

SELECT * FROM User_Procedures WHERE NVL(Procedure_Name,Object_Name) = 'PROCNAME';

最新更新