关于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进行输出查询。
分享到:
相关推荐
知识点:PL/SQL 程序块的基本结构、变量声明、SELECT INTO 语句、DBMS_OUTPUT.PUT_LINE procedures 在 PL/SQL 中,程序块是基本的编程单元。程序块由 DECLARE、BEGIN、EXCEPTION 和 END四部分组成。DECLARE 部分...
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 多...
DBMS_OUTPUT.PUT_LINE('No data found for the given condition.'); WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('More than one row matched the condition.'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('An...
dbms_output.put_line('Fetch rows is ' || d); EXIT WHEN d ; DBMS_SQL.COLUMN_VALUE(c, 1, n_tab); DBMS_SQL.COLUMN_VALUE(c, 2, n_tab1); -- 这里可以添加更多的逻辑来处理查询结果 END LOOP; dbms_...
代码如下:/*If语句:判断用户输入的数字。*/set serveroutput on –接收键盘输入accept num prompt ‘请输入一个数字:’; declare –将屏幕输入的数字付给... if pnum = 2 then dbms_output.put_line(‘您输入的是2’)
DBMS_OUTPUT.PUT_LINE('Name changed from ' || :OLD.name || ' to ' || :NEW.name); END IF; END; / -- 更新一条记录来触发触发器 UPDATE dept SET name = 'New Name' WHERE id = '001'; ``` #### 10.4 系统...
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....
DBMS_OUTPUT.PUT_LINE('str=' || str); END; ``` - **声明与表中的列类型一致的变量**: ```sql DECLARE sname EMP.ENAME%TYPE; -- 声明一个与EMP表的ENAME属性一致的类型 BEGIN SELECT ENAME INTO sname ...
在Oracle数据库环境中,`DBMS_OUTPUT.PUT_LINE`是开发者们常用的一个过程,用于将调试信息或数据输出到服务器会话的标准输出设备。然而,在实际应用过程中,有些用户可能会遇到使用`DBMS_OUTPUT.PUT_LINE`后,信息并...
--使用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;
dbms_output.put_line('姓名:' || emp_record.ename); dbms_output.put_line('薪水:' || emp_record.sal); dbms_output.put_line('工作:' || emp_record.job); end; / ``` **3. 使用ROWTYPE定义记录变量** - ...
DBMS_OUTPUT.PUT_LINE(myid); DBMS_OUTPUT.PUT_LINE(myname); END; / ``` 在这个例子中,`myid`和`myname`的数据类型将与`DEPT`表中的`ID`和`NAME`列相同。这有助于确保数据的一致性和减少出错的可能性。 #### %...
在这个部分,我们学习了如何声明变量,如`i NUMBER`,以及如何执行SQL语句,如`DBMS_OUTPUT.PUT_LINE`用于输出信息。需要注意的是,`DBMS_OUTPUT.PUT_LINE`的输出默认是关闭的,需要通过`SET SERVEROUTPUT ON`命令...
dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal); END LOOP; ``` 4. **Fetch游标**: 如果需要更精细的控制,可以使用`FETCH`语句手动提取游标数据。首先打开游标,然后...
DBMS_OUTPUT.PUT_LINE('LINE' || LINE_NUM || ':' || TEXT_BUFFER); END LOOP; EXCEPTION WHEN NO_DATA_FOUND THEN RETURN; WHEN UTL_FILE.INVALID_PATH THEN DBMS_OUTPUT.PUT_LINE('INVALID PATH'); ...
这个程序块的关键是使用select into语句将数据从emp表中 fetch 到变量中,然后使用dbms_output.put_line语句将结果输出。 2. 编写一个程序块,接受用户输入一个部门号,从dept表中显示该部门的名称与所在位置 知识...
dbms_output.put_line(my_dept_rec.department_id || ' : ' || my_dept_rec.department_name); end loop; end; declare l_empno emp.EMPLOYEE_ID%type; begin select EMPLOYEE_ID into l_empno from emp; -...
这里定义了一个`varchar2`类型的变量`v_name`并赋值为`fjx`,然后使用`dbms_output.put_line`将其值输出。`||`符号用来连接字符串。 #### 3. 处理除零异常 ```plsql declare v_num number := 0; begin v_num := 2...
这行代码调用了PL/SQL中的预定义包`dbms_output`中的过程`put_line`,用于向服务器输出流写入一行文本。“Hello World”将作为参数传递给`put_line`过程。 #### 四、PL/SQL变量和常量 在PL/SQL中,可以通过`...
例如,在本例中,我们使用`DBMS_OUTPUT.PUT_LINE`函数打印出每条记录的信息。 ```sql DBMS_OUTPUT.PUT('empno=' || l_emp.empno || ' is'); DBMS_OUTPUT.PUT(l_emp.ename || ', job is ' || l_emp.job || ' sal is ...