Oracle SQL 関数 : EXTRACT : 日時フィールドを返す

 datetimeRet := EXTRACT( [YEAR,MONTH,DAY,HOUR,MINUTE,SECOND] FROM exp1 );

 EXTRACTはexp1の指定された日時フィールドを返します。
SQL> SELECT
  2   EXTRACT(YEAR  FROM TO_DATE('2004/10/20')) AS YEAR
  3  ,EXTRACT(MONTH FROM TO_DATE('2004/10/20')) AS MONTH
  4  ,EXTRACT(DAY   FROM TO_DATE('2004/10/20')) AS DAY
  5  ,TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS')  AS SYSTEM_DATE
  6  ,EXTRACT(HOUR   FROM TO_TIMESTAMP(TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS'))) AS HOUR
  7  ,EXTRACT(MINUTE FROM TO_TIMESTAMP(TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS'))) AS MINUTE
  8  ,EXTRACT(SECOND FROM TO_TIMESTAMP(TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS'))) AS SECOND
  9  FROM DUAL;

      YEAR      MONTH        DAY SYSTEM_DATE               HOUR     MINUTE     SECOND
---------- ---------- ---------- ------------------- ---------- ---------- ----------
      2004         10         20 2004/10/20 11:59:07         11         59          7

上記のSQLでは2~4行では年,月,日の値をそれぞれ返し、6~8行では時,分,秒を返します。
6~8のTIMESTAP型データをDATE型に変更するとエラーが発生します。
時,分,秒を取得するにはTIMESTAP型データでなければならない様です。