用视图能显示单行超过255个字符的例子

sql 代码
  1. /*   
  2. 说明:    
  3.      在调试sql脚本时,如果要用Dbms_Output.Put_Line显示脚本中的变量,如果变量中的内容单行长度   
  4.      超过了255个字符,会提示下面错误:   
  5.      ORA-20000: ORU-10028: line length overflow, limit of 255 chars per line   
  6.      所以我们可以用下面的已经创建好的包和视图来实现。   
  7.         
  8.      简单点说就是也可以创建一个表,其中一个字段为long,将变量插入后再用select去查看。上面方式省略了创建表的过程。   
  9. */   
  10. -- 第一步   
  11. create or replace package my_output    
  12. as    
  13.      procedure put( s in varchar2 );    
  14.      procedure put_line( s in varchar2 );    
  15.      procedure new_line;    
  16.      
  17.      function get_line( n in number ) return varchar2;    
  18.      pragma restrict_references( get_line, wnds, rnds );    
  19.      
  20.      function get_line_count return number;    
  21.      pragma restrict_references( get_line_count, wnds, rnds, wnps );    
  22.      
  23.      pragma restrict_references( my_output, wnds, rnds, wnps, rnps );    
  24. end;    
  25.   
  26. -- 第二步     
  27. create or replace package body my_output    
  28. as    
  29.      type Array is table of varchar2(4000) index by binary_integer;    
  30.      g_data        array;    
  31.      g_cnt        number default 1;    
  32.      
  33.      procedure put( s in varchar2 )    
  34.      is    
  35.      begin    
  36.          if ( g_data.last is not null ) then    
  37.              g_data(g_data.last) := g_data(g_data.last) || s;    
  38.          else    
  39.              g_data(1) := s;    
  40.          end if;    
  41.      end;    
  42.      
  43.      procedure put_line( s in varchar2 )    
  44.      is    
  45.      begin    
  46.          put( s );    
  47.          g_data(g_data.last+1) := null;    
  48.      end;    
  49.      
  50.      procedure new_line    
  51.      is    
  52.      begin    
  53.          put( null );    
  54.          g_data(g_data.last+1) := null;    
  55.      end;    
  56.      
  57.      function get_line( n in number ) return varchar2    
  58.      is    
  59.          l_str varchar2(4000) default g_data(n);    
  60.      begin    
  61.          g_data.delete(n);    
  62.          return l_str;    
  63.      end;    
  64.      
  65.      function get_line_count return number    
  66.      is    
  67.      begin    
  68.          return g_data.count+1;    
  69.      end;    
  70.      
  71. end;    
  72.   
  73. -- 第三步   
  74. create or replace view my_output_view    
  75. as    
  76. select rownum lineno, my_output.get_line( rownum ) text    
  77.    from all_objects    
  78.   where rownum < ( select my_output.get_line_count from dual );    
  79.   
  80. -----------------------------------------------------------------   
  81. -- 实现   
  82. -- 1 写入要查看的内容   
  83. declare    
  84.   QuerySql varchar2(4000);   
  85. begin     
  86.   Dbms_Output.enable(4000);   
  87.   QuerySql   :=' IIDD AS ID, IsDel AS 已删除, AnJianID AS 案件编号, BaoGaoRenXM AS 报案人姓名, JieBaoRenXM AS 接报人姓名, JieBaoShiJian AS 接报时间, BM_MingCheng AS 办案单位名称  From XZ_ShouLiDengJi a WHERE  (exists (Select ''S'' from GG_AnJianBanLi  where AnJianID=a.AnJianID) and not exists (Select ''S'' From GG_AnJian Where AnJianID=a.AnJianID and HuiBiRenYuan_BH like ''%admin%'')) ORDER BY AddDateTime DESC';   
  88.   Dbms_Output.Put_Line('LENGTH : ' || Length(QuerySql));   
  89.   my_output.put_line(QuerySql);    
  90. end;    
  91. -- 2 查看结果   
  92. select * from my_output_view    
  93.   
  94.   
  95.   
  96.   
  97.   
  98.   
  99.   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值