oracle的dbms_output (转载)

1、如果dbms_output.put_line的内容不能显示,需要在命令行中先敲入set serveroutput on;只要敲一遍就好,之后dbms_output.put_line的内容就能显示出来了;

2、dbms_output.put_line每行只能显示255个字符,超过了就会报错,报错内容如下

      ORA-20000: ORU-10028: line length overflow, limit of 255 chars per line

解决这个问题的方法如下:

 

 declare

    v_result Varchar2(1000);--这是需要打印出结果的字符串

    v_pos Number := 1;--用来记录v_result每行开始字符的位置

 

 WHILE v_pos<= LENGTH(v_result) LOOP

            DBMS_OUTPUT.PUT_LINE(SUBSTR(v_result, v_pos, 200));

            v_pos:= v_pos+ 200;

       END LOOP;

这样就能打印超过255长度的字符串,超过200长度的自动换行打印出来 

begin

DBMS_OUTPUT.put( "put======= ");--不换行

DBMS_OUTPUT.put( "put======= ");--不换行

DBMS_OUTPUT.put_line( "putline====== ");--换行

DBMS_OUTPUT.put_line( "putline====== ");--换行

DBMS_OUTPUT.put_line( "putline====== ");--换行

end;

结果:

put=======put=======putline======

putline======

putline======

 

DECLARE
abc   number;
CURSOR   cur   IS   SELECT   1   from   dual;

BEGIN
DBMS_OUTPUT.PUT_LINE( 'cursor   opened ');
open   cur;

LOOP
fetch   cur   into   abc;
DBMS_OUTPUT.PUT_LINE( 'one   data ');
exit   when   cur%notFound;
END   LOOP;
close   cur;
end;

 

要使用DBMS_OUTPUT,必须先
SQL> set serveroutput on

dbms_output.put_line输出的记录太多的话,会出现缓冲区的溢出:
ORA-20000: ORU-10027: buffer overflow, limit of 2000 bytes
ORA-06512: 在"SYS.DBMS_OUTPUT", line 35
ORA-06512: 在"SYS.DBMS_OUTPUT", line 198
ORA-06512: 在"SYS.DBMS_OUTPUT", line 139
ORA-06512: 在line 9

解决方法如下:
(1) 用dbms_output.enable( )设定长度.
DBMS_OUTPUT.ENABLE (buffer_size IN INTEGER DEFAULT 20000);
(注:该方法按如上设置没成功,直接DBMS_OUTPUT.ENABLE (20000);则成功执行)

(2) 也可以SET SERVEROUTPUT ON SIZE 5000

其中(1)方法仅对当次设定有效,删除后仍会提示错误,而(2)方法是修改配置信息,如果不关闭Sql*plus的该设定仍然存在。


在SQL Server中的输出方式是PRINT 函数:

IF EXISTS (SELECT zip FROM authors WHERE zip = '94705')
PRINT 'Berkeley author'

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/zhangxs_3/archive/2009/10/19/4697160.aspx

### Oracle DBMS_OUTPUT.PUT_LINE 的具体用法及示例 #### 1. **DBMS_OUTPUT.PUT_LINE 的基本功能** `DBMS_OUTPUT.PUT_LINE` 是 Oracle 数据库中用于将消息输出到客户端的一个过程。它通常用于调试 PL/SQL 程序或显示程序运行中的信息[^3]。 #### 2. **启用 DBMS_OUTPUT** 在使用 `DBMS_OUTPUT.PUT_LINE` 前,需要确保客户端(如 SQL*Plus 或其他工具)启用了输出功能。可以通过以下命令启用: ```sql SET SERVEROUTPUT ON; ``` 此命令会激活 SQL*Plus 或类似工具的输出缓冲区,使得 `DBMS_OUTPUT.PUT_LINE` 的内容能够被显示[^3]。 #### 3. **简单示例** 以下是一个简单的 PL/SQL 块,演示如何使用 `DBMS_OUTPUT.PUT_LINE` 输出文本: ```sql BEGIN DBMS_OUTPUT.PUT_LINE('Hello, World!'); END; ``` 执行上述代码后,如果启用了 `SERVEROUTPUT`,将在客户端看到输出 `Hello, World!`[^3]。 #### 4. **结合变量的示例** 可以将变量值与字符串结合输出,以便调试或查看变量内容: ```sql DECLARE v_name VARCHAR2(50) := 'Alice'; v_age NUMBER := 25; BEGIN DBMS_OUTPUT.PUT_LINE('Name: ' || v_name || ', Age: ' || v_age); END; ``` 这段代码将输出:`Name: Alice, Age: 25`。 #### 5. **循环中的使用** 在循环结构中,`DBMS_OUTPUT.PUT_LINE` 可以用来逐行输出数据: ```sql BEGIN FOR i IN 1..5 LOOP DBMS_OUTPUT.PUT_LINE('Iteration: ' || i); END LOOP; END; ``` 上述代码将输出从 1 到 5 的迭代次数。 #### 6. **查询结果的输出** 可以结合游标或查询语句,将查询结果逐行输出: ```sql DECLARE CURSOR emp_cursor IS SELECT employee_id, first_name FROM employees WHERE department_id = 10; emp_record emp_cursor%ROWTYPE; BEGIN OPEN emp_cursor; LOOP FETCH emp_cursor INTO emp_record; EXIT WHEN emp_cursor%NOTFOUND; DBMS_OUTPUT.PUT_LINE('Employee ID: ' || emp_record.employee_id || ', Name: ' || emp_record.first_name); END LOOP; CLOSE emp_cursor; END; ``` 此示例展示了如何通过游标逐行处理查询结果并输出每个员工的信息。 #### 7. **注意事项** - 默认情况下,`DBMS_OUTPUT` 缓冲区大小有限。如果需要输出大量数据,可以调整缓冲区大小: ```sql BEGIN DBMS_OUTPUT.ENABLE(1000000); -- 设置缓冲区大小为 1MB END; ``` - 在某些图形化工具(如 SQL Developer)中,可能需要手动启用 `DBMS_OUTPUT` 面板以查看输出内容。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值