如何避免dbms_output.put_line的255长度限止(转)

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 );

rudolf@TEST>begin
2 my_output.put_line(lpad('love',1400,'love'));
3 end;
4 /

PL/SQL procedure successfully completed.

rudolf@TEST>select * from my_output_view;

LINENO
----------
TEXT
----------------------------------------------------------------------------------------------------
1
lovelovelovelovelovelovelovelovelovelovelovelovelovelovelovelovelovelovelovelovelovelovelovelovelove.....


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/756652/viewspace-242260/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/756652/viewspace-242260/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值