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

Oracle 如何检查存储过程是否存在?,oracle,stored-procedures,Oracle,Stored Procedures,我搜索了网络,找到了一个使用以下代码段检查存储过程是否存在的: select * from USER_SOURCE where type='PROCEDURE' and name='my_stored_procedure.' 是否有其他方法来检查程序是否存在 编辑以添加: SELECT * FROM USER_PROCEDURES WHERE object_name = 'MY_STORED_PROCEDURE' SELECT * FROM USER_OBJEC

我搜索了网络,找到了一个使用以下代码段检查存储过程是否存在的:

select * 
  from USER_SOURCE 
 where type='PROCEDURE' 
   and name='my_stored_procedure.' 
是否有其他方法来检查程序是否存在

编辑以添加:

SELECT *
  FROM USER_PROCEDURES
 WHERE object_name = 'MY_STORED_PROCEDURE'
SELECT *
  FROM USER_OBJECTS
 WHERE object_type = 'PROCEDURE'
   AND object_name = 'MY_STORED_PROCEDURE'
在发布SQL Server方式之前,请注意,我正在寻找ORACLE方式。

备选方案:

用户程序:

SELECT *
  FROM USER_PROCEDURES
 WHERE object_name = 'MY_STORED_PROCEDURE'
SELECT *
  FROM USER_OBJECTS
 WHERE object_type = 'PROCEDURE'
   AND object_name = 'MY_STORED_PROCEDURE'
用户对象:

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

查看数据库中是否存在过程的唯一方法是通过查询
DBA\u对象
。这里的缺点是只有dba可以访问此视图。第二个最佳方法是使用所有对象<代码>所有对象向您显示您在某种程度上拥有特权的对象<代码>用户对象仅显示您自己的对象。

选择* 从用户源 其中type='PROCEDURE'
和name='my_storage_procedure'.

在SQL*PLUS、ODBC测试、

按行顺序从name='MY_PROCEDURE'所在的所有_源中选择文本

其中MY_PROCEDURE是存储过程名称

以下是示例输出:

获取所有数据: “文本” “程序Usp\u Get\u Blob
“(
“P_DOC_ID INT,
“P_DOC_TEXT OUT BLOB)
“作为
“开始
“选择B1 进入p\u文档\u文本
“来自blobtest
“其中ID=p_doc_ID;

“结束;“

对我有用的东西

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'

我无法找到具有上述任何方法的存储过程


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

正是我想要的…谢谢!+1..要记住的其他视图:
所有对象
DBA\u对象
(如果您有该特权)。对于
\u过程
也一样。如果您有无效的过程(由于编译错误),无效过程列在
USER\u OBJECTS
ALL\u OBJECTS
中,但未列在
USER\u PROCEDURES
ALL\u PROCEDURES
中。如果存储过程在包中怎么办?这是什么?与问题相同?