关于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进行输出查询。
分享到:
相关推荐
dbms_output.put_line('价格在100以下'); elsif vprice>100 and vprice dbms_output.put_line('价格在100—1000之间'); else dbms_output.put_line('价格在1000以上'); end if; end; --PL/SQL基础5 多...
代码如下:/*If语句:判断用户输入的数字。*/set serveroutput on –接收键盘输入accept num prompt ‘请输入一个数字:’; declare –将屏幕输入的数字付给... if pnum = 2 then dbms_output.put_line(‘您输入的是2’)
DBMS_OUTPUT.new_line; --4.绑定变量 --dbms_sql.bind_variable(l_cursor,':ename',l_ename); --5.执行 l_retval := dbms_sql.execute(l_cursor); --6.取数 --6.1取列名 for i in 1..l_colcnt loop dbms_output....
--使用PLSQL输出三角形,只要是三个角 declare m number := 10; begin for x in reverse -m..m loop for y in -m..m loop if abs(y) + abs(x) <= m and x>=0 then ... dbms_output.new_line(); end loop; end;
Oracle用三种循环方法输出乘法表,比如loop的用法: m := 1; loop n := 1; loop dbms_output.put(m||'*'||n||'='||m*n||' ');... dbms_output.put_line(''); m := m + 1; exit when m>9; end loop;
DECLARE TYPE num_tab IS TABLE OF ...dbms_output.put_line(to_char(v_example_tab2(1))||' '|| to_char(v_example_tab2(10))||' '|| to_char(v_example_tab2(-10))||' '|| to_char(v_example_tab2(v_num))); END;
dbms_output.put_line('-------------' || v_minp_rec.table_name || v_part_key_value); end if; v_part_prefix := substr(v_part_name, 0, length(v_part_name) - v_part_key_length); DBMS_OUTPUT.put...
用dbms_output.put_line 不显示
放进DBMS_OUTPUT.PUT_LINE调用的消息显示在屏幕上--但是只有在过程完成以后才能显示出来。 DBMS_OUTPUT包也有其他的缺点。就是DBMS_OUTPUT包不许数据库开发者实时的看到消息。 使用EmailUtils包,你可以简简单单的把...
declare m number := 3; begin for y in -m..m loop for x in -m..m loop if abs(y) + abs(x) dbms_output.put('*'); else dbms_output.put(' ');... dbms_output.new_line(); end loop; end;
DBMS_OUTPUT.PUT_LINE('记录已经成功插入,并已记录到日志'); ELSIF UPDATING THEN --UPDATE触发 v_type := 'UPDATE'; DBMS_OUTPUT.PUT_LINE('记录已经成功更新,并已记录到日志'); ELSIF DELETING THEN v_type := ...
/*departments.location_id//部门地址编号*/ /*复制表的命令 create table emp2 as select * from emp where 1=1;...dbms_output.put_line(v_rec.dd_sal||v_rec.dd_name||to_char(v_rec.dd_hiredate,'yyyymmdd')); end;
DBMS_OUTPUT.PUT_LINE(v_dept); END; 2、写一个存储过程 给一个员工id,查找他的领导的名字,并输出。 CREATE OR REPLACE PROCEDUER pro_getManager( p_id IN s_emp.id%TYPE, p_name OUT s_emp.first_name%...
6 dbms_output.put_line('雇员名:'||v_ename||' 工资:'||v_sal); 7 end; 8 / 包含定义,执行,和例外处理的pl/sql块。 实例4.当输入的员工号不存在时 SQL> declare 2 v_ename varchar2(20); 3 v_sal number...
本文为大家分享了Oracle中三种循环(For、While、Loop)案例,供大家参考,具体内容如下 1.ORACLE中的FOR循环用法(九九乘法表) ... dbms_output.new_line; end loop; end; 2.ORACLE中的While循环用法(九九乘法表) d
Sql代码 代码如下: — Created on 2010/04/17 by NAN declare — Local variables here i integer;... IF v_date1 > v_date2 THEN dbms_output.put_line( ‘if’); ELSE dbms_output.put_line( ‘else’); END IF; end
他们必须使用dbms_output.put_line调用,这个调用直到过程完成才返回结果。 在本文中,我想演示如何从Oracle 8i数据库直接发送电子邮件,作为一种实时通信解决方案。我们的做法是把所有必需的过程与函数包装在自定义...
oracle求100和200之间素数方法 ... dbms_output.put_line(n); end if; end loop; end; while方法: declare n number := 100; i number := 2; flag boolean := true; BEGIN WHILE n <=200 LOOP
Dbms_output.put_line(‘no_data_found’); ACCESS_INTO_NULL 为对象赋值前必需初始化对象。对应ORA-06530错误。 CASE_NOT_FOUND 使用CASE语句时在WHEN子句中没有包含必需的条件分支,并且没有包含ELSE语句。 对应...
DBMS_OUTPUT.PUT_LINE('和为:'||TO_CHAR(a)); END; / 【例3-2】:使用%TYPE声明变量,输出制定表中的相关信息。 DECLARE my_name student.sname%TYPE; BEGIN SELECT sname INTO my_name FROM student WHERE no...