pipeline function管道函式
oracle管道函式是一類特殊的函式,oracle管道函式返回值型別必須為集合。
在普通的函式中,使用dbms_output輸出的資訊,需要在伺服器執行完整個函式後一次性的返回給客戶端。如果需要在客戶端實時的輸出函式執行過程中的一些資訊,在oracle9i以後可以使用管道函式(pipeline function)。
關鍵字PIPELINED表明這是一個oracle管道函式,oracle管道函式的返回值型別必須為集合,在函式中,PIPE ROW語句被用來返回該集合的單個元素,函式以一個空的RETURN 語句結束,以表明它已經完成。接下來演示一下管道函式的實際用法。
在建立管道函式之前必須建立一個用於存放管道函式返回值的型別,因為管道的返回值可以看做是一個虛表。
1、建立type物件
SQL> create or replace type MsgType as table of varchar2(4000);
2 /
型別已建立。
2、建立管道函式,注意PIPELINED關鍵字和pipe的用法
SQL> create or replace function f_pipeline_test return MsgType
2 pipelined as
3 begin
4 for i in 1 .. 10 loop
5 pipe row('Iteration'||i||'at'systimestamp);
6 sys.dbms_lock.sleep(1);
7 end loop;
8 pipe row('all done!');
9 return;
10 end;
11 /
警告: 建立的函式帶有編譯錯誤。
以上function編譯錯誤詳細資訊為:“Error: PLS-00201: 必須說明識別符號 'DBMS_LOCK'”,這是由於授權的原因,可通過如下方案解決:
SQL> conn sys/oracle as sysdba
已連線。
SQL> grant execute on dbms_lock to test;
授權成功。
SQL> conn test/test
已連線。
在sql*plus中執行該函式,首先設定arraysize為1,否則伺服器會按照預設的15來向客戶端返回資訊,這會影響我們的測試效果。
SQL> set arraysize 1
SQL> select * from table(f_pipeline_test);
COLUMN_VALUE
--------------------------------------------------------------------------
Iteration1at10-10月-14 10.49.50.533000000 上午 +08:00
Iteration2at10-10月-14 10.49.51.563000000 上午 +08:00
Iteration3at10-10月-14 10.49.52.577000000 上午 +08:00
Iteration4at10-10月-14 10.49.53.591000000 上午 +08:00
Iteration5at10-10月-14 10.49.54.605000000 上午 +08:00
Iteration6at10-10月-14 10.49.55.619000000 上午 +08:00
Iteration7at10-10月-14 10.49.56.633000000 上午 +08:00
Iteration8at10-10月-14 10.49.57.647000000 上午 +08:00
Iteration9at10-10月-14 10.49.58.661000000 上午 +08:00
Iteration10at10-10月-14 10.49.59.675000000 上午 +08:00
all done!
已選擇11行。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21251711/viewspace-1293869/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 函式(FUNCTION)函式Function
- JavaScript function 函式JavaScriptFunction函式
- oracle function函式castOracleFunction函式AST
- JS:1.3,函式(function)JS函式Function
- Java 8 Function 函式介面JavaFunction函式
- js的函式function(一)JS函式Function
- javascript Function()建構函式JavaScriptFunction函式
- PL/SQL 06 函式 functionSQL函式Function
- deterministic function 函式索引Function函式索引
- SQL 自定義函式FUNCTIONSQL函式Function
- oracle的並行管道函式Oracle並行函式
- JS 函式式概念: 管道 和 組合JS函式
- JavaScript入門-函式function(二)JavaScript函式Function
- Function(函式分享)第二節Function函式
- JavaScript Function 函式深入總結JavaScriptFunction函式
- dbms_xplan.display_cursor管道函式函式
- 實現call函式,手寫Function.prototype.call函式函式Function
- PyTorch:損失函式loss functionPyTorch函式Function
- SAP 的CALL FUNCTION 函式彙總Function函式
- 高階函式 - Higher Order Function函式Function
- ES6 箭頭函式(arrow function)函式Function
- PHP函式register_shutdown_function的用法PHP函式Function
- JavaScript自執行函式(function(){})()的理解JavaScript函式Function
- 密碼檢驗函式verify_function密碼函式Function
- ORACLE FUNCTION函式中DETERMINISTIC測試OracleFunction函式
- 關於函式索引(function-based index)函式索引FunctionIndex
- Go的程式設計模式一-管道PipelineGo程式設計設計模式
- 管道函式及表函式的測試PIPELINED__PIPE ROW函式
- JavaScript 高階函式(Heigher-order function)JavaScript函式Function
- ThinkPHP函式提示錯誤function undefined的方法PHP函式FunctionUndefined
- JavaScript學習總結(四)function函式部分JavaScriptFunction函式
- 邏輯迴歸損失函式(cost function)邏輯迴歸函式Function
- 匿名函式function前面的! ~等符號作用函式Function符號
- C++ 11 - STL - 函式物件(Function Object) (下)C++函式物件FunctionObject
- C++中的虛擬函式(virtual function)C++函式Function
- 推薦一個 PHP 管道外掛 League\PipelinePHP
- java8 函式式介面——Function/Predict/Supplier/ConsumerJava函式Function
- 【譯】節選–揭祕命名函式表示式(Named function expressions )函式FunctionExpress