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
中。如果存储过程在包中怎么办?这是什么?与问题相同?