如何检查存储过程是否存在?

Pau*_*tos 10 oracle stored-procedures

我搜索了网络,我发现了一个帖子,它使用以下代码片段来检查存储过程是否存在:

select * 
  from USER_SOURCE 
 where type='PROCEDURE' 
   and name='my_stored_procedure.' 
Run Code Online (Sandbox Code Playgroud)

有没有其他方法来检查程序是否存在?

编辑添加:

在发布SQL Server方式之前,我正在寻找ORACLE方式.

Cha*_*ndu 34

备择方案:

USER_PROCEDURES:

SELECT *
  FROM USER_PROCEDURES
 WHERE object_name = 'MY_STORED_PROCEDURE'
Run Code Online (Sandbox Code Playgroud)

USER_OBJECTS:

SELECT *
  FROM USER_OBJECTS
 WHERE object_type = 'PROCEDURE'
   AND object_name = 'MY_STORED_PROCEDURE'
Run Code Online (Sandbox Code Playgroud)

  • +1 ..要记住的其他视图:`ALL_OBJECTS`,`DBA_OBJECTS`(如果你有私有).对于`_PROCEDURES`也是如此. (2认同)
  • 如果您有无效的过程(由于编译错误),则该无效过程会列在“USER_OBJECTS”和“ALL_OBJECTS”中,但不会列在“USER_PROCEDURES”和“ALL_PROCEDURES”中。 (2认同)

Waq*_*gir 5

对我有用的东西!

SELECT text
FROM all_source
WHERE name = 'MY_SP_NAME'
ORDER BY line;
Run Code Online (Sandbox Code Playgroud)

或者你可以尝试这样调用SP:

CALL MY_SP_NAME();
Run Code Online (Sandbox Code Playgroud)

您最终可能会出现这样的错误,但这确认您在那里定义了SP:

OCI Statement Execution failure.ORA-06553: PLS-306: wrong number or types of arguments in call to 'MY_SP_NAME'
Run Code Online (Sandbox Code Playgroud)