首页 文章

Oracle存储过程视图sys_refcursor

提问于
浏览
1

我有一个从第三方报告工具调用的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;

2 回答

  • 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监视器报告为您提供线索 .

  • 1

    “存储过程在执行时不返回任何行 . ”

    发布的代码执行select语句,但不会将任何内容传递给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会将参数与查询结果集相关联 .

相关问题