【问题标题】:How to check if a stored procedure exist?如何检查存储过程是否存在?
【发布时间】:2011-08-08 22:52:05
【问题描述】:

我在网上搜索了一个post,它使用以下sn-p来检查是否存在存储过程:

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

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

编辑添加:

在发布SQL Server方式之前,请先寻找ORACLE方式。

【问题讨论】:

    标签: oracle stored-procedures


    【解决方案1】:

    替代方案:

    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.. 要记住的其他视图:ALL_OBJECTSDBA_OBJECTS(如果您有该权限)。 _PROCEDURES 也一样。
    • 如果你有一个无效的过程(由于编译错误),这个无效的过程在USER_OBJECTSALL_OBJECTS中是listet,但在USER_PROCEDURESALL_PROCEDURES中没有列出。
    • 如果存储过程在包内怎么办?
    • 这仅显示您的过程/对象,而不是全部
    【解决方案2】:

    对我有用的东西!

    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'
    

    【讨论】:

    • 这仅显示您有权限的对象,而不是全部
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      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;
      “结束;”

      【讨论】:

      • 这仅显示您有权限的对象,而不是全部
      【解决方案5】:

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

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

      【讨论】:

      • 那不是存储过程,而是打包的。
      【解决方案6】:

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

      【讨论】:

      • 这是什么?和问题一样吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多