如何查看存储过程中动态生成的sql

今天在工作中遇到那么一个需求,要查看存储过程中生成的sql,以便和实际的业务需求核对。

经过多方查询,想到如下办法:

1、在存储过程中凡是涉及到execute immediate mysql的地方,加上DBMS_OUTPUT.PUT_LINE(mysql);同时为了减少运行时间将execute immediate mysql注释。

2、如果因为mysql字符过长,报string buffer is too small,那么采用另外一种方式,事先定义v_pos Number := 1;然后通过以下语句输出: 

WHILE v_pos<= LENGTH(mysql) LOOP
   DBMS_OUTPUT.PUT_LINE(SUBSTR(mysql, v_pos, 200));
   v_pos:=v_pos+200;
END LOOP;

3、然后编译完上面的存储过程后,在command window下执行如下语句:

set serveroutput on;
declare
begin
dbms_output.enable(200000);
proc_one_to_many_source_erp_jc('QKJTJ_BAS_ITEMINFO_DWJJ','004002');--存储过程名称自行调整,参数自行在填充
end;

4、这样输出的sql后面是不带;号的,请自行在每条sql后加上;号。
另外通过第二种方式输出的sql,会强制带有空格,请自行去掉空格,方式有很多,我是在word中通过将^p替换成 的方式去的。

5、最后的将sql拷贝到工具中格式化一下就可以看懂了。

6、暂时只想到这么个办法,有其他办法再进行优化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值