我有许多执行动态sql的PL/SQL函数和过程。
可以提取解析后的语句和dbms_output作为调试辅助吗?
我真正想要的是看到解析后的sql (带有替代参数的sql语句)。
示例:
我有一个动态SQL语句,如下所示
SQ:='SELECT :pComno as COMNO,null t$CPLS,t$CUNO,t$cpgs,t$stdt,t$tdat,t$qanp,t$disc,:cS Source FROM BAAN.TTDSLS031'||PCOMNO --1
|| ' WHERE' ||' TRIM(T$CUNO)=trim(:CUNO)' --2
|| ' AND TRIM(T$CPGS)=trim(:CPGS)' --3
|| ' AND T$QANP = priceWorx.fnDefaultQanp ' --4
|| ' AND priceWorx.fdG2J(sysdate) between priceWorx.fdG2J(t$stdt) and priceWorx.fdG2J(t$tdat)' --5
|| ' AND rownum=1 order by t$stdt';--6
execute immediate SQ into R using
PCOMNO,'C' --1
,PCUNO-- 2
,PCPGS;-- 3将向服务器发送什么语句?
发布于 2012-03-08 13:32:33
您可以按如下方式显示与SQL语句关联的绑定变量:
select v$sql.sql_text
,v$sql_bind_capture.*
from v$sql_bind_capture
inner join v$sql on
v$sql_bind_capture.hash_value = v$sql.hash_value
and v$sql_bind_capture.child_address = v$sql.child_address
--Some unique string from your query
where lower(sql_text) like lower('%priceWorx.fdG2J(sysdate)%');您可能希望看到整个查询,将所有绑定变量替换为它们的实际值。不幸的是,由于以下问题,没有简单的方法来准确地获得您正在寻找的东西。
这意味着你可能被困在了丑陋的方式中。您需要手动存储SQL和绑定变量数据,类似于user1138658正在做的事情。
发布于 2012-03-08 04:29:19
您可以使用dbms_output包来做到这一点。您可以使用enable和disable调试程序,并使用get_line过程获得代码行。
我用execute immediate进行了测试,插入到一个表中,它可以工作。
我最近用一个使用它的例子回答了another question。
发布于 2012-03-08 03:47:59
一种可能的解决方案是在您的模式中创建一个表temp(id varchar2,data clob);,然后将insert语句放在您希望找到已解析的键的任何位置
insert into temp values(seq.nextval,v_text);例如
declare
v_text varchar2(2000);
begin
v_text:='select * from emp'; -- your dynamic statement
insert into temp values(seq.nextval,v_text); --insert this script whenever you want to find the actual query
OPEN C_CUR FOR v_text;
-----
end;现在,如果您看到表temp,您将获得该动态语句的数据。
https://stackoverflow.com/questions/9607571
复制相似问题