关于10g以下dbms_output.put_line超长的问题 (转http://wallimn.iteye.com/blog/486615)
来源:互联网 发布:阿里云如何注册域名 编辑:程序博客网 时间:2024/04/28 21:41
关于10g以下dbms_output.put_line超长的问题
- 博客分类:
- 数据库
Oracle
关于10g以下dbms_output.put_line超长的问题
对于10gdbms_output.put_line的长度是没有限制
如果报错:buffer overflow,执行如下语句即可:
set serveroutput ON SIZE UNLIMITED FORMAT WORD_WRAPPED
由于10g以下dbms_output.put_line的长度有限制
所以今天特意写了一个按照回车符来截取字符串,也就是按行截取,然后打印出来的过程,希望对某些人有用!
create or replace procedure print_proc(str in varchar2) is
/*
--打印字符串,调试的时候用
--由于字符串过长,超过了dbms_output.put_line的长度,故采用本程序分行打印出来
--@auther:Z.X.T
--@date:2007-6-26
*/
begin
dbms_output.put_line('lengthb(str) =' || lengthb(str));
if (lengthb(str) < 255) then
dbms_output.put_line(str);
else
for i in 1 .. length(str) - length(replace(str, chr(10))) + 1
loop
dbms_output.put_line(substr(str, instr(chr(10) || str, chr(10), 1, i), instr(str ||
chr(10), chr(10), 1, i) -
instr(chr(10) || str, chr(10), 1, i)));
end loop;
end if;
exception
when others then
dbms_output.put_line(sqlerrm);
dbms_output.put_line(dbms_utility.format_call_stack);
end print_proc;
另一篇相关文章:
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进行输出查询。
对于10gdbms_output.put_line的长度是没有限制
如果报错:buffer overflow,执行如下语句即可:
set serveroutput ON SIZE UNLIMITED FORMAT WORD_WRAPPED
由于10g以下dbms_output.put_line的长度有限制
所以今天特意写了一个按照回车符来截取字符串,也就是按行截取,然后打印出来的过程,希望对某些人有用!
create or replace procedure print_proc(str in varchar2) is
/*
--打印字符串,调试的时候用
--由于字符串过长,超过了dbms_output.put_line的长度,故采用本程序分行打印出来
--@auther:Z.X.T
--@date:2007-6-26
*/
begin
dbms_output.put_line('lengthb(str) =' || lengthb(str));
if (lengthb(str) < 255) then
dbms_output.put_line(str);
else
for i in 1 .. length(str) - length(replace(str, chr(10))) + 1
loop
dbms_output.put_line(substr(str, instr(chr(10) || str, chr(10), 1, i), instr(str ||
chr(10), chr(10), 1, i) -
instr(chr(10) || str, chr(10), 1, i)));
end loop;
end if;
exception
when others then
dbms_output.put_line(sqlerrm);
dbms_output.put_line(dbms_utility.format_call_stack);
end print_proc;
另一篇相关文章:
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进行输出查询。
0 0
- 关于10g以下dbms_output.put_line超长的问题 (转http://wallimn.iteye.com/blog/486615)
- volatile 的使用(http://gyy.iteye.com/blog/166678)
- python中文编码问题(转自http://wolfmaster.iteye.com/blog/638029)
- 【转】http://sjsky.iteye.com/blog/1142177
- 关于Oracle中varchar2和dbms_output.put_line的长度限制问题小结
- 解决oracle 10g sql *plus 用dbms_output.put_line()输出时的长度限制问题 ORA-20000: ORU-10028: line le
- dbms_output.put_line输出长度问题
- 关于Linux的进程和线程 http://kenby.iteye.com/blog/1014039
- dbms_output超长问题
- sqlplus 的 dbms_output.put_line 用法
- 小气的dbms_output.put_line长度
- JS中使用EL表达式的问题 http://tfy1332.iteye.com/blog/
- 我原来的blog:http://wangbin579.iteye.com/
- jQuery对象与DOM对象之间的转换(转自:http://wozailongyou.iteye.com/blog/299311)
- Dubbo扩展点重构 (转http://javatar.iteye.com/blog/1041832)
- 需求分析 转自:http://fangang.iteye.com/blog/1345099
- Cursor使用(一)http://mengyang.iteye.com/blog/1007644
- Session(http://mynote.iteye.com/blog/1127469)
- Spring中的四种声明式事务的配置
- 日记账
- How to run test cases in a specified file?
- db2中 union all和 union 区别(54048错误代码)
- Ubuntu+Virtualbox Android源码编译环境搭建
- 关于10g以下dbms_output.put_line超长的问题 (转http://wallimn.iteye.com/blog/486615)
- mysql&oracle
- 对“demo!demo.Index+HookProc::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活
- Hive 查询优化总结
- Apache MiNa 实现多人聊天室
- 成都传智播客IT培训目标
- 【数位DP】SWUST 2014校赛 J:2014
- 是大富豪大发光火大发光火
- 一些能够提高程序员办公效率的办公桌