【问题标题】:Oracle Stored Procedure view sys_refcursorOracle 存储过程视图 sys_refcursor
【发布时间】:2017-08-18 02:02:58
【问题描述】:

我有一个从第三方报告工具调用的 oracle 存储过程。存储过程在执行时不返回任何行。

我知道查询返回结果的事实,只是where 子句中出现了问题,参数是从网站传递的。

我正在尝试查看正在执行的查询,但日志没有显示查询,只是它正在调用存储过程。我无权访问网站代码来编写响应并显示存储过程或参数。您能否提供有关如何从下面的存储过程中查看 sys_refcursor 的指导?我正在使用 TOAD,当我使用 toad 脚本运行器时,我没有看到任何结果

代码

    create or replace procedure dolphin.report_four
    ( p_1    char,
     P_2    date,
     p_recordset   out sys_refcursor)
    AS
    Begin
    Select
    column_1,
    column_2,
    column_3

     from dolphin.tank
    where
     column_1 = 'BAIT' and
    column_2 = 'p_2'

   end report_four; 

【问题讨论】:

    标签: oracle stored-procedures


    【解决方案1】:

    创建用于记录此过程调用的表,并在过程中添加INSERT 语句以添加传递参数的行。之后记得COMMIT;

    将过程查询设置为:

    select /*+ monitor MY_KEY_765746573*/
     f1, f2, ...
    from ...
    

    使应用程序调用该过程。

    然后运行

    select sql_id, sql_fulltext from v$sql where sql_fulltext like '%MY_KEY_'||'765746573%';
    

    然后将找到的 SQL_ID 放入调用中:

    select dbms_sqltune.report_sql_monitor('YOUR SQL_ID HERE') from dual;
    

    我希望记录表记录和 SQL 监控报告能给你一个线索。

    【讨论】:

    • 任何遵循此建议的人都应该记住,dbms_sqltune 是 Tuning and Diagnostics 包的一部分,在 Enterprise Edition 中需要额外付费。如果您有正确的许可,您应该只使用这个包。
    【解决方案2】:

    “存储过程在执行时没有返回任何行。”

    发布的代码执行选择语句,但不向 REF CURSOR 传递任何内容。如果这是一个真实的过程,它会在您尝试运行它时出现错误。大概您已经对在 StackOverflow 上发布的源代码进行了编辑,因此很难判断这种情况是否反映了您的实际代码,但它应该这样做:

    create or replace procedure dolphin.report_four
        ( p_1    char,
         P_2    date,
         p_recordset   out sys_refcursor)
        AS
    Begin
        open  p_recordset for
            Select
                column_1,
                column_2,
                column_3
             from dolphin.tank
             where
             column_1 = p_1 and
             column_2 = p_2;
    end report_four;  
    

    打开 REF CURSOR 将参数与查询结果集相关联。

    【讨论】:

    • 感谢您的回复。你是对的,我确实编辑了代码以使其更简单,我猜它有负面影响。问题在于 column_2='p_2' 的 where 子句。我试图找到一种方法来查看 where 子句是什么来识别问题。我确实用 p_2 做了一个插入语句,参数值很好。感谢您提供 REF CURSOR 是查询结果集。我以为是查询本身。
    猜你喜欢
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 2017-05-22
    相关资源
    最近更新 更多