2008年12月15日 星期一

Oracle Common Table Expression (CTE) - Oracle10g


/*
  DB2 CTE 沒有辦法使用 Set or Select into 將結果設給變數,
  Oracle CTE 卻可以做到.
  implement CTE,Recursive SQL in the Scenario:
  寫一段 PL/SQL, 取得系統日期第三季的起始日及迄日,並將值設給變數
*/

/* PL/SQL 內容如下: */

DECLARE
  vSTARTDT DATE;
  vENDDT DATE;
BEGIN
  WITH TEMP AS
  (
   SELECT STARTDT + LEVEL COL1
   FROM  (SELECT TO_DATE(EXTRACT(YEAR FROM SYSDATE) ||
                 '0101','YYYYMMDD') STARTDT
        FROM  DUAL) A1
   CONNECT BY LEVEL <= 365
  )
  SELECT MIN(COL1),MAX(COL1)
  INTO  vSTARTDT,vENDDT
  FROM  TEMP
  WHERE  EXTRACT(YEAR FROM COL1) =
       EXTRACT(YEAR FROM SYSDATE)
  AND   TO_CHAR(COL1,'Q') = 3;

  DBMS_OUTPUT.PUT_LINE(vSTARTDT);
  DBMS_OUTPUT.PUT_LINE(vENDDT);
END;
/

/* 執行後傳回結果 */

01-7月 -08
30-9月 -08

已順利完成 PL/SQL 程序.