Oracle 函數function之返回結果集


工作中常需要經過一段復雜邏輯處理后,得出的一個結果集。並能夠將這個結果集作為一個表看待,去進行關聯查詢

我一般采用建立函數function的方式來處理。

--創建包,聲明function和type
CREATE
OR REPLACE PACKAGE PAK_TEM AS TYPE DATE_RECORD IS RECORD --自定義類型-行(含字段及類型) ( NAME VARCHAR2 (20), VALUE VARCHAR2 (20) ); TYPE DATE_TABLE IS TABLE OF DATE_RECORD; --自定義table類 FUNCTION GET_TERM_YEARS RETURN DATE_TABLE --返回table類型 PIPELINED; --流水式 END PAK_TEM; /

--實現包體中的function CREATE OR REPLACE PACKAGE BODY PAK_TEM AS FUNCTION GET_TERM_YEARS RETURN DATE_TABLE PIPELINED IS L_RESULT DATE_RECORD; BEGIN FOR REC IN (SELECT DISTINCT TO_CHAR (STATUS_TIME, 'YYYY') FROM TEM_TB WHERE TO_CHAR (STATUS_TIME, 'YYYY') != '0001') LOOP L_RESULT.NAME := REC.YEAR || ''; L_RESULT.VALUE := REC.YEAR; PIPE ROW (L_RESULT); --依次返回行 END LOOP; END; END PAK_TEM; /

像查詢一個表一樣來操作function,使用 TABLE(自定義函數)

SELECT * FROM  TABLE(PAK_TEM.get_term_years());

 


 

PS:以下是定義oracle的table類型示例:

--oracle內置類型
TYPE STRING_TABLE IS TABLE OF VARCHAR(2000);

--自定義類型(DATE_RECORD)
TYPE DATE_RECORD IS RECORD --自定義類型-行(含字段及類型)
(
NAME VARCHAR2 (20),
VALUE VARCHAR2 (20)
);
TYPE DATE_TABLE IS TABLE OF DATE_RECORD; --自定義table類(DATE_TABLE)

 


免責聲明!

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



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