oracle系統包—-dbms_output用法


dbms_output包主要用於調試pl/sql程序,或者在sql*plus命令中顯示信息(displaying message)和報表,譬如我們可以寫一個簡單的匿名pl/sql程序塊,而該塊出於某種目的使用dbms_output包來顯示一些信息。

涉及到的知識點如下:
1、enable:在serveroutput on的情況下,用來使dbms_output生效(默認即打開)
2、disable:在serveroutput on的情況下,用來使dbms_output失效
3、put:將內容寫到內存,等到put_line時一起輸出
4、put_line:不用多說了,輸出字符
5、new_line:作為一行的結束,可以理解為寫入buffer時的換行符
6、get_line(value, index):獲取緩沖區的單行信息
7、get_lines(array, index):以數組形式來獲取緩沖區的多行信息

需要注意以下幾點:
1、set serveroutput on:如果要在sqlplus中看到dbms_output的輸出,則必須設置該參數值為on
2、每行能容納的最大值是32767bytes
3、buffer的默認值是20000bytes,可設置的最小值為2000bytes,最大值為1000000bytes

例子一、put和new_line

1
2
3
4
5
6
7
8
9
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 ;                                                    

執行運行結果:

1
2
ab
hello world!

例子二、put_line

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
set serveroutput off ;
create table t(a int , b int , c int );
insert into t values (111111,222222,333333);
insert into t values (444444,555555,666666);
insert into t values (777777,888888,999999);
commit ;
 
create table tt(a int ,b varchar2(100));
 
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 ;                                           
/                                              
              
select * from tt;

執行結果如下:

1
2
3
4
5
a    b
--- -----------------------
0   111111,222222,333333
0   444444,555555,666666
0   777777,888888,999999

注:使用get_line時不能用put_line輸出,因為put_line之后會將buffer清空。(當然在serveroutput off的情況下put_line是不影響buffer的)。

例子三:put_lines

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 ;                                               
/

執行結果如下:

1
2
3
line one
line two
line three

注意數組使用的格式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM