dbms_output.put_line&longValue

dbms_output.put_line长度限制问题

对于10g以上版本(包括10g), dbms_output.put_line的最大长度限制是32767. 如果报错buffer overflow, 执行如下语句即可:
set serveroutput ON SIZE UNLIMITED FORMAT WORD_WRAPPED

对于10g以下版本dbms_output.put_line最大长度限制是255.

解决方法 1

Declare
    ls_sql Varchar2(2000);
Begin
    ls_sql := '123
   234
   
   
123';
    --  按空格符调用 dbms_output.put_line
    for i in 1 .. length(LS_SQL) - length(replace(LS_SQL, ' ')) + 1 loop
        dbms_output.put_line(substr(LS_SQL,
                                    instr(' ' || LS_SQL, ' ', 1, i),
                                    instr(LS_SQL || ' ', ' ', 1, i) -
                                    instr(' ' || LS_SQL, ' ', 1, i)));
    End loop;
End;
输出结果:
123

 
 
234


123

解决方法 2

设置   dbms_output   输出的缓冲。

Enable DBMS_OUTPUT and set the buffer size. The buffer size can be between 1 and 1,000,000

在begin后面加上 DBMS_OUTPUT.ENABLE(buffer_size => null);

Declare
    ls_sql Varchar2(2000);
Begin
    --set serveroutput on;
    --dbms_output.enable(buffer_size >= null);存储过程中可用 
    DBMS_OUTPUT.ENABLE (20000);--默认值20000 <=100 0000
    
    ls_sql := '123
   234
   
   
123';
    --直接输出
    dbms_output.put_line(ls_sql);

End;
结果
123
   234


123

---打印超长的clob字符------------------------------------------
declare
  c1 clob;  
  strLog varchar2(2000);--单次输出的临时变量
  loopCount number(5);
begin
  dbms_output.enable(50000);--设置test window 的dbms output 的buffersize
  
  for i in 1 .. 40000 loop
    c1:=c1||i||'test';
  end loop;  
  
  dbms_output.put_line('length(clob):'||dbms_lob.getlength(c1));
  loopCount:=floor(dbms_lob.getlength(c1)/1000);--按1000分块,看能分多少块
  dbms_output.put_line('loopCount:'||loopCount);
  
  for i in 0 .. loopCount-1 loop
    dbms_output.put_line('loop-----------'||i);
    strLog:=substr(c1,i*1000+1,1000);--这里按clob内字符数截取的,每个字符可能是英文字符1byte,也可能是汉字字符2byte
    dbms_output.put_line(strLog);
  end loop;
  
  --dbms_output.put_line('clob:'||substr(:strlogclob,1,2000));
  --注意,测试时要释放clob,但在C#端调用时,要由C#的调用方自行释放
  dbms_lob.freetemporary(c1);
  
  dbms_output.put_line('finish-----------');
end;







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值