DBMS_OUTPUT包學習
雖然一直在使用DBMS_OUTPUT.PUT_LINE,但是說實話沒有仔細研究過DBMS_OUTPUT包中的其他方法和函式的用法,所以這次特地來研究一下。 先簡單的講解一下這個包的所有procedure的含義及作用:
-----------------------
1、enable:在serveroutput on的情況下,用來使dbms_output生效(預設即開啟)
2、disable:在serveroutput on的情況下,用來使dbms_output失效
3、put:將內容寫到記憶體,等到put_line時一起輸出
4、put_line:將內容寫到記憶體,等到put_line時一起輸出(有換行的功效)
5、new_line:作為一行的結束,可以理解為寫入buffer時的換行符
6、get_line:獲取沒有輸出的buffer中的資訊
7、get_lines:以陣列形式來獲取所有buffer中的資訊
需要注意以下幾點:
-----------------------
1、set serveroutput on:如果要在sqlplus中看到dbms_output的輸出,則必須設定該引數值為on
2、每行能容納的最大值是32767bytes
3、buffer的預設值是20000bytes,可設定的最小值為2000bytes,最大值為1000000bytes
下面舉幾個例子來說明一些不常用的方法的使用:
例子1:(put和new_line)
-----------------------
SQL> set serveroutput on
SQL> begin
2 dbms_output.put_line('three names will be written.');
3 dbms_output.put('j'); --增加至buffer
4 dbms_output.new_line; --回車
5 dbms_output.put('s'); --增加至buffer
6 dbms_output.new_line; --回車
7 dbms_output.put('t'); --增加至buffer
8 dbms_output.new_line; --回車
9 dbms_output.put_line('over.'); --與之前所有一起輸出
10 end;
11 /
three names will be written.
j
s
t
over.
PL/SQL procedure successfully completed
例子2:(put_line)
-----------------------
SQL> set serveroutput off;
SQL> create table t(a int,b int,c int);
Table created
SQL> insert into t values(111111,222222,333333);
1 row inserted
SQL> insert into t values(444444,555555,666666);
1 row inserted
SQL> insert into t values(777777,888888,999999);
1 row inserted
SQL> create table tt(a int,b varchar2(100));
Table created
SQL> declare
2 msg varchar2(120);
3 cursor t_cur is select * from t order by a;
4 v_line varchar2(100);
5 v_status integer := 0;
6 begin
7 dbms_output.enable;
8 for i in t_cur loop
9 msg := i.a || ',' || i.b || ',' || i.c;
10 dbms_output.put_line(msg);
11 end loop;
12
13 dbms_output.get_line(v_line,v_status);
14 while v_status = 0 loop
15 insert into tt values(v_status, v_line);
16 dbms_output.get_line(v_line,v_status);
17 end loop;
18 end;
19 /
PL/SQL procedure successfully completed
SQL> select * from tt;
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的)
例子3:(put_lines)
-----------------------
SQL> set serveroutput on
SQL> declare
2 v_data dbms_output.chararr;
3 v_numlines number;
4 begin
5 -- enable the buffer first.
6 dbms_output.enable(1000000);
7
8 dbms_output.put_line('line one');
9 dbms_output.put_line('line two');
10 dbms_output.put_line('line three');
11
12 v_numlines := 3;
13 dbms_output.get_lines(v_data, v_numlines);
14 for v_counter in 1..v_numlines loop
15 dbms_output.put_line(v_data(v_counter));
16 end loop;
17 end;
18 /
line one
line two
line three
PL/SQL procedure successfully completed
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16860121/viewspace-715656/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- wireshark抓包學習
- 揹包 學習筆記筆記
- 閉包方法的學習
- [20190603]關於dbms_output輸出問題.txt
- 大資料學習:閉包大資料
- go 閉包學習筆記Go筆記
- Python學習筆記 - 閉包Python筆記
- .Net Core 學習筆記1——包、元包、框架筆記框架
- rust學習八、包和模組Rust
- Python學習之模組與包Python
- java學習筆記(包裝類)Java筆記
- 深入學習js之——閉包#8JS
- 一文讀懂遷移學習(附學習工具包)遷移學習
- Go語言Context包原始碼學習GoContext原始碼
- opencascade原始碼學習之HLRAlgo包 -HLRAlgo原始碼Go
- Go 官方包函式學習及示例Go函式
- 零基礎學習 Python 之閉包Python
- go標準庫-log包原始碼學習Go原始碼
- opencascade Bnd_Box原始碼學習 包圍盒原始碼
- opencascade Bnd_BoundSortBox原始碼學習 包圍盒原始碼
- 【Go語言學習】匿名函式與閉包Go函式
- 包郵送書啦 |《機器學習入門》機器學習
- 學習擴張包的開發到釋出
- 【Go】Go語言學習筆記-3-包Go筆記
- 【GO學習二】包,函式,常量和變數Go函式變數
- 閉包學習 1--例項分析 ComposerStaticInitxx::getInitializer
- Vue原始碼學習二 ———— Vue原型物件包裝Vue原始碼原型物件
- CTF學習(14)MISC(資料包中的線索)
- opencascade Bnd_OBB原始碼學習 OBB包圍盒原始碼
- 學習SSM階段使用到的jar包座標.SSMJAR
- JS學習理解之閉包和高階函式JS函式
- 比特幣學習筆記——————4、金鑰、地址、錢包比特幣筆記
- 深入學習Netty(5)——Netty是如何解決TCP粘包/拆包問題的?NettyTCP
- opencascade Bnd_B3f原始碼學習 包圍盒原始碼
- 深入學習作用域和閉包—全面(JS系列之二)JS
- 建立 PHP 擴充套件包步驟 -- 課程學習分享PHP套件
- 你不懂的JS學習筆記(作用域和閉包)JS筆記
- Python學習之路37-使用asyncio包處理併發Python
- iOS學習筆記42 Swift(二)函式和閉包iOS筆記Swift函式