2011-04-19 77 views
9

我已经搜查了网,我发现,使用下面的代码片段来检查存储过程存在post如何检查存储过程是否存在?

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

是否有任何其他的方法来检查,如果过程存在?

编辑补充:

之前发布的SQL Server的方式,请我在找ORACLE的方式。

回答

30

替代方案:

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' 
+0

正是我寻找......谢谢! – 2011-04-19 19:24:04

+1

+1 ..其他视图要记住:'ALL_OBJECTS','DBA_OBJECTS'(如果你有那个特权)。 '_PROCEDURES'也一样。 – Guru 2011-04-19 19:50:13

0

唯一的方法,如果在数据库中存在一个过程,虽然查询DBA_OBJECTS。这里的缺点是只有一个dba可以访问这个视图。其次,使用all_objects。 ALL_OBJECTS向您显示您拥有某种特权的对象。 USER_OBJECTS只显示你自己的对象。

-1

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

+0

这是什么?与问题一样吗? – Cilan 2013-12-26 18:10:46

1

在SQL执行下面的查询* PLUS,ODBC测试,...

选择文本FROM ALL_SOURCE其中name = 'my_procedure的' ORDER BY线

其中my_procedure的是存储过程的名称。

下面是输出示例:

获取数据全部: “TEXT” “程序Usp_Get_Blob
”(
“P_DOC_ID INT,
” P_DOC_TEXT OUT BLOB)
“为
” 开始
“select B1 into p_doc_text
”from blobtest
“where where ID = p_doc_id;
“end;”

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' 
相关问题