加载中…
个人资料
朱向峰
朱向峰
  • 博客等级:
  • 博客积分:0
  • 博客访问:131,360
  • 关注人气:17
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

Dbms_Output.Put_Line字符超过255的解决方案

(2007-11-14 11:35:12)
标签:

进行

解决方案

脂肪肝

不爽

字符

分类: 工作相关

在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

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有