oracle系統包—-dbms_output用法

來源:互聯網
上載者:User

標籤:

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

123456789 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;                                                    

執行運行結果:

12 abhello world!

例子二、put_line

123456789101112131415161718192021222324252627282930 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;

執行結果如下:

12345 a    b--- ----------------------- 0   111111,222222,3333330   444444,555555,6666660   777777,888888,999999

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

例子三:put_lines

12345678910111213141516171819 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;                                                /

執行結果如下:

123 line oneline twoline three

注意數組使用的格式。

oracle系統包—-dbms_output用法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.