Oracle存储过程视图sys_refcursor

时间:2017-03-25 00:43:54

标签: oracle stored-procedures

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

答案 0 :(得分: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 :(得分: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会将参数与查询结果集相关联。