有以下脚本,利用游标去更新表:
需更新的记录约7万条,在PL/SQL Developer中执行该脚本,卡死。
考虑将更新语句输出,再在PL/SQL Developer直接执行更新语句。于是将脚本稍加改动:
在PL/SQL Developer中执行遇到错误overflow。
overflow原因:在Oracle10gr2版本以前中,利用DBMS_output.putline()来输出是有限制的,包括每行的字符个数(255)及缓存文件的大小(最大可以通过set serveroutput on size 1000000设置到1M),输出缓存超出这个大小会报overflow的Oracle异常。
从10gr2版本开始,使用DBMS_output输出的每行的字符个数可以有32767个,默认缓存大小是无限制的(unlimited)。
服务器上的oracle即是10gr2版本,将输出脚本在10gr2版本的oracle客户端sql*plus中测试,可以正常输出。但在PL/SQL Developer 7.1.5里面的sql window中执行,一直会报overflow的异常。
为了完整的看到这近7万条dbms_outpout.putline()的输出,考虑将内容输出到文件中。将脚本保存为文件a.sql,在Oracle自带的sql*plus中,逐条执行命令
SET SERVEROUTPUT ON;--开启dbms_output控制台输出
SET SQLBLANKLINES ON;--运行sql语句换行
SPOOL c:\a.log;--将控制台输出保存到文件a.log
@ c:\a.sql;--执行a.sql
spool off;
<