工做中常須要通過一段複雜邏輯處理後,得出的一個結果集。並可以將這個結果集做爲一個表看待,去進行關聯查詢oracle
我通常採用創建函數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(自定義函數)spa
SELECT * FROM TABLE(PAK_TEM.get_term_years());
PS:如下是定義oracle的table類型示例:code
--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)