SQL文を教えてください
初心者です。 SQL文を教えてください。
バージョンはOracle 9.2です。
SELECT LTRIM(TO_CHAR(SEQ_PB_TYOHYO.NEXTVAL,'00000000')) AS NO_TYOHYO
,TO_CHAR(SYSDATE,'YYMMDD') AS DT_SYORI
,TO_CHAR(SYSDATE,'HH24MISS') AS TM_SYORI
,UM.CD_TOKCOD
,TM.RN_TOKUI
,SUM(DECODE(HM.CD_HSYUCD,'000001',UM.SU_URIAGE))
,SUM(DECODE(HM.CD_HSYUCD,'000001',UM.KN_URIAGE))
,SUM(DECODE(HM.CD_HSYUCD,'000002',UM.SU_URIAGE))
,SUM(DECODE(HM.CD_HSYUCD,'000002',UM.KN_URIAGE))
,/* 以下省略(000012まである) */
From URIMEI UM
,TOKMAS TM
,HINMAS HM
Where (UM.KB_NYURYO = 1 Or UM.KB_NYURYO = 3)
And UM.KB_DATA = 1
And (UM.KB_URINYU = 1 Or UM.KB_URINYU = 2 Or UM.KB_URINYU = 3)
And UM.DT_URINYU >= CONCAT(W_Date1,'01')
And UM.DT_URINYU <= TO_CHAR(Last_Day(W_Date2),'YYMMDD')
And UM.CD_TOKCOD = TM.CD_TOKCOD(+)
And HM.CD_HSYUCD = UM.CD_HSYUCD(+)
GROUP BY HM.CD_HSYUCD;
SQLスクラッチパットにて実行すると
「ここでは順序番号は使用できません」と言うエラーメッセージが出ます。
で、上から5行消して実行すると実行結果が返ってくるのです。
こういう場合はどうしたらよろしいでしょうか?
お礼
yasumituさん アドバイスありがとうございます。 ご指摘の通り、interval型にすると 問題なく動作しました。 良く考えてみると、当初私が理解していた以下SQL(1)は 「interval」句が省略されていて、以下SQL(2)が本来の形 なのですね。 (1) select current_timestamp + '3 seconds'; (2) select current_timestamp + interval '3 seconds'; 上記SQL(1)では暗黙の型変換(char→interval)がされているのだと理解しました。 ※上記の問題がクリアできなかった為、今日は「応急措置」として 以下のようにUNIX時間(秒)に一度変換して計算していましたが これで明日はちゃんと対応できます。 (本日の応急措置) SELECT round(EXTRACT(EPOCH FROM current_timestamp)); すっきりしました。 ありがとうございました。