ITPub博客

首页 > 数据库 > Oracle > 【DBMS】Oracle DBMS_OUTOUT程序介绍

【DBMS】Oracle DBMS_OUTOUT程序介绍

原创 Oracle 作者:xysoul_云龙 时间:2021-11-15 17:12:25 0 删除 编辑

  该包通常用于调试,或用于向 SQL*DBA 或 SQL*Plus 显示消息和报告

  此包中的PUT 过程和PUT_LINE 过程能够将信息放置在可由另一个触发器、过程或包读取的缓冲区中。

  在单独的 PL/SQL 过程或匿名块中, 您可以通过调用GET_LINE 过程和GET_LINES 过程来显示缓冲的信息。

  如果包被禁用,所有对子程序的调用都将被忽略。通过这种方式,您可以设计您的应用程序, 以便仅当客户端能够处理信息时子程序才可用。


DBMS_OUTPUT 规则和限制

  • 最大行大小为 32767 字节。

  • 默认缓冲区大小为 20000 字节。最小大小为 2000 字节,最大为无限制。


 DBMS_OUTPUT 子程序介绍

描述
描述
DISABLE Procedure 禁用消息输出

ENABLE Procedure

启用消息输出

GET_LINE Procedure

从缓冲区中检索一行

GET_LINES Procedure

从缓冲区检索行数组

NEW_LINE Procedure

终端使用创建的行,一行的结束

PUT Procedure

在缓冲区中放置部分行

PUT_LINE Procedure

将行放入缓冲区


下面主要介绍 三个过程。

PUT  PUT_LINE  NEW_LINE


示例:

--put和new_line
SQL> set serveroutput on; --显示结果
begin
   dbms_output.put('a'); --写入buffer但不输出
   dbms_output.put('b'); --写入buffer但不输出
   dbms_output.new_line; --回车(换行),输出                              
   dbms_output.put_line('hello world!'); --输出并换行 
   dbms_output.put('d'); --写入buffer但不输出 
end;                                                     
/ SQL>   2    3    4    5    6    7    8  
ab
hello world!
PL/SQL procedure successfully completed.
SQL>


注:使用get_line时不能用put_line输出,因为put_line之后会将buffer清空。(当然在serveroutput off的情况下put_line是不影响buffer的)。


示例:

--get_line
declare
   msg varchar2(120);                               
   cursor t_cur is select * from t order by a;      
   v_line varchar2(100);                            
   v_status integer := 0;                           
begin                                           
   dbms_output.enable;                              
   for i in t_cur loop                              
       msg := i.a || ',' || i.b || ',' || i.c;          
       dbms_output.put_line(msg); --put                   
   end loop;                                       
                                                  
   dbms_output.get_line(v_line, v_status); --get          
   while v_status = 0 loop                         
       insert into tt values(v_status, v_line);        
       dbms_output.get_line(v_line, v_status);          
   end loop;                                       
end;                                            
/                                               
--get_lines
set serveroutput on;
declare
   v_data dbms_output.chararr;                          
   v_numlines number;                                   
begin                                               
   --enable the buffer first.                          
   dbms_output.enable(1000000);                         
                                                      
   dbms_output.put_line('line one');                    
   dbms_output.put_line('line two');                    
   dbms_output.put_line('line three');                 
                                                      
   v_numlines := 3;                                    
   dbms_output.get_lines(v_data, v_numlines);  --array, index        
   for v_counter in 1..v_numlines loop                 
       dbms_output.put_line(v_data(v_counter));            
   end loop;                                           
end;                                                
/


参考:

  • https://www.cnblogs.com/forestwolf/p/4885160.html

  • 官方文档

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29487349/viewspace-2842277/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
主要从事Oracle数据库 DBA相关工作,其他操作系统、中间件等也有涉及,热衷分享。岁月老将至,如有幸在江湖中留点踪迹,也是欣慰。 【文盲筱烨】好读书爱运动的IT技术爱好者 微博:文盲筱烨 微信公众号:筱烨视点

注册时间:2014-02-15

  • 博文量
    370
  • 访问量
    909548