我在网上搜索过,但我发现post使用以下代码段来检查存储过程是否存在:
select *
from USER_SOURCE
where type='PROCEDURE'
and name='my_stored_procedure.'
有没有其他方法可以检查程序是否存在?
已编辑添加:
在发布SQL Server之前,我正在寻找ORACLE方式。
答案 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。'