如何查看存储过程中动态生成的sql
2015-08-18 15:23
351 查看
今天在工作中遇到那么一个需求,要查看存储过程中生成的sql,以便和实际的业务需求核对。
经过多方查询,想到如下办法:
1、在存储过程中凡是涉及到execute immediate mysql的地方,加上DBMS_OUTPUT.PUT_LINE(mysql);同时为了减少运行时间将execute immediate mysql注释。
2、如果因为mysql字符过长,报string buffer is too small,那么采用另外一种方式,事先定义v_pos Number := 1;然后通过以下语句输出:
3、然后编译完上面的存储过程后,在command window下执行如下语句:
4、这样输出的sql后面是不带;号的,请自行在每条sql后加上;号。
另外通过第二种方式输出的sql,会强制带有空格,请自行去掉空格,方式有很多,我是在word中通过将^p替换成 的方式去的。
5、最后的将sql拷贝到工具中格式化一下就可以看懂了。
6、暂时只想到这么个办法,有其他办法再进行优化。
经过多方查询,想到如下办法:
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、暂时只想到这么个办法,有其他办法再进行优化。
相关文章推荐
- LINQ To SQL 语法及实例大全【转】
- Mysql分表分区
- MySql分析算法作品索引(马上,只是说说而已B-tree)
- win7安装mysql
- oracle数据库的导入导出命令
- VC2013连接MySql
- oracle 分区表的学习
- sqlmap检测sql注入漏洞
- SQL统计信息解释
- linux下oracle数据库自动备份
- SQL Server2008 R2开启远程连接总结
- mysql 查询表字段名称 语句
- oracle密码过期ORA-28002: 7天之后口令将过期的解决方法
- mysql5.6删除的功能
- 数据库设计三大范式
- Architecting Backend For A Social Product
- mysql查询结果合并
- oracle运算符及单表查询
- Oracle数据创建虚拟列和复合触发器的方法
- SQL优化,解决系统运行效率瓶颈