oracle dbms_output.put_line 字符过长,Dbms_Output.Put_Line字符超过255的解决方案

在Oracle

10g之前,使用Dbms_Output.Put_Line进行输出调试,如果输出信息单行超过255个字符,则会提示错误:ORA-20000:

ORU-10028: line length overflow, limit of 255 chars per

line,相当烦人的一个限制。

网上搜的解决方案,目前觉得还不错,使用起来也很方便。

-- 第一步

create or replace package my_output

as

procedure put( s in varchar2 );

procedure put_line( s in varchar2 );

procedure new_line;

function get_line( n in number ) return varchar2;

pragma restrict_references( get_line, wnds, rnds );

function get_line_count return number;

pragma restrict_references( get_line_count, wnds, rnds, wnps );

pragma restrict_references( my_output, wnds, rnds, wnps, rnps

);

end;

-- 第二步

create or replace package body my_output

as

type Array is table of varchar2(4000) index by

binary_integer;

g_data array;

g_cnt number default 1;

procedure put( s in varchar2 )

is

begin

if ( g_data.last is not null ) then

g_data(g_data.last) := g_data(g_data.last) || s;

else

g_data(1) := s;

end if;

end;

procedure put_line( s in varchar2 )

is

begin

put( s );

g_data(g_data.last+1) := null;

end;

procedure new_line

is

begin

put( null );

g_data(g_data.last+1) := null;

end;

function get_line( n in number ) return varchar2

is

l_str varchar2(4000) default g_data(n);

begin

g_data.delete(n);

return l_str;

end;

function get_line_count return number

is

begin

return g_data.count+1;

end;

end;

-- 第三步

create or replace view my_output_view

as

select rownum lineno, my_output.get_line( rownum ) text

from all_objects

where rownum < ( select

my_output.get_line_count from dual );

-- 应用

使用my_output.put_line替换Dbms_Output.Put_Line进行输出,通过select * from

my_output_view进行输出查询。

PS:体检发现脂肪肝,不爽、不爽、非常不爽!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值