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

时间:2011-04-19 19:17:26

标签: oracle stored-procedures

我在网上搜索过,但我发现post使用以下代码段来检查存储过程是否存在:

select * 
  from USER_SOURCE 
 where type='PROCEDURE' 
   and name='my_stored_procedure.' 

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

已编辑添加:

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

6 个答案:

答案 0 :(得分:34)

备选方案:

<强> USER_PROCEDURES:

SELECT *
  FROM USER_PROCEDURES
 WHERE object_name = 'MY_STORED_PROCEDURE'

<强> USER_OBJECTS:

SELECT *
  FROM USER_OBJECTS
 WHERE object_type = 'PROCEDURE'
   AND object_name = 'MY_STORED_PROCEDURE'

答案 1 :(得分:5)

对我有用的东西!

SELECT text
FROM all_source
WHERE name = 'MY_SP_NAME'
ORDER BY line;

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

CALL MY_SP_NAME();

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

OCI Statement Execution failure.ORA-06553: PLS-306: wrong number or types of arguments in call to 'MY_SP_NAME'

答案 2 :(得分:1)

在SQL * PLUS,ODBC Test,...

中执行以下查询

SELECT text FROM all_source WHERE name ='MY_PROCEDURE'ORDER BY line

其中MY_PROCEDURE是存储过程名称。

以下是示例输出:

获取所有数据: “文本” “程序Usp_Get_Blob
“(
“P_DOC_ID INT,
“P_DOC_TEXT OUT BLOB”
“作为
“开始
“选择B1   进入p_doc_text
“来自blobtest
“其中ID = p_doc_id;
“结束;”

答案 3 :(得分:0)

查看数据库中是否存在过程的唯一方法是查询DBA_OBJECTS。这里的缺点是只有dba才能访问此视图。第二好的是使用all_objects。 ALL_OBJECTS向您显示您以某种方式获得特权的对象。 USER_OBJECTS只显示您自己的对象。

答案 4 :(得分:0)

我无法使用上述任何方法找到存储过程。

原因:存储过程位于程序包中。 Oracle使用软件包在一个模块中收集多个存储过程。

答案 5 :(得分:-1)

选择*   来自USER_SOURCE  其中type ='PROCEDURE'    和name ='my_stored_procedure。'