我有一个从第三方报告工具调用的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;
答案 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会将参数与查询结果集相关联。