- 快速, 不需等查詢執行完畢,每一筆 row 直接回傳結果
- 執行效率好
- 可輕易達成複雜的邏輯需求
- 將程式保留在資料庫
- 可輸入變數
- 可達成 Transformation ( 行列轉置 )
(Function Code)
CREATE OR REPLACE PACKAGE PIPELINED_FUN_TEST_PKG AS
TYPE NUMBER_TBL_TYPE IS TABLE OF NUMBER;
FUNCTION EXAMPLE1(V_MAX_NUMBER NUMBER) RETURN NUMBER_TBL_TYPE PIPELINED;
END PIPELINED_FUN_TEST_PKG;
CREATE OR REPLACE PACKAGE BODY APPS.PIPELINED_FUN_TEST_PKG AS
FUNCTION EXAMPLE1(V_MAX_NUMBER NUMBER) RETURN NUMBER_TBL_TYPE PIPELINED IS
BEGIN
FOR i IN 1..V_MAX_NUMBER LOOP
PIPE ROW(i);
END LOOP;
RETURN;
END;
END PIPELINED_FUN_TEST_PKG;
(Query)
SELECT * FROM TABLE(PIPELINED_FUN_TEST_PKG.EXAMPLE1(:X))
這樣的功能可以讓很多原本很複雜的處理變得更單純且快速,好比說原本串連很多,且速度不快的 View,可以考慮改寫成這個方式,應該可以加快查詢速度。目前我已使用此功能, 去驗證 Email 欄位是否有不合法的字元。
沒有留言:
張貼留言