0

SQL*Loader スクリプト用の制御ファイルを作成しようとしています。NOT NULL として定義されている日付列があります。ファイルからの受信値が空白の場合、現在の日付を使用するようにスクリプトを設定する必要があります。私はいくつかの方法を試しました - 以下にいくつかの例を示します - しかし、SQL ローダーを実行するとエラーが発生し続けますが、デュアルから選択するとフォーマットは機能します

SQLLoader でどのように設定する必要がありますか?

  PROGRAM_CHANGE_TS     POSITION(37:47) DATE "decode(length(trim(:PROGRAM_CHANGE_TS)), 11, to_date(:PROGRAM_CHANGE_TS,'yymmddHH24:MI'),to_date(sysdate,'yymmddHH24:MI'))",
  PROGRAM_CHANGE_TS     POSITION(37:47) DATE "NVL(Decode(:PROGRAM_CHANGE_TS,'00/00/0000',TO_DATE('01/01/2010','dd/mm/yyyy'),TO_DATE(:PROGRAM_CHANGE_TS,'dd/mm/yyyy')),TO_DATE('01/01/2010','dd/mm/yyyy'))",

oracle デコード例 ORA-00907: 右括弧がありません

select decode(length(trim(:PROGRAM_CHANGE_TS)), 11, to_date(:PROGRAM_CHANGE_TS,'yymmddHH24:MI'),to_date(sysdate,'yymmddHH24:MI')) from dual

また

select NVL(Decode(:PROGRAM_CHANGE_TS,'00/00/0000',TO_DATE('01/01/2010','dd/mm/yyyy'),TO_DATE(:PROGRAM_CHANGE_TS,'dd/mm/yyyy')),TO_DATE('01/01/2010','dd/mm/yyyy')) from dual

作品

SQL ローダー制御ファイルから使用するには、どのような変更を加える必要がありますか?

4

2 に答える 2

0

ファイルからの受信値が空白の場合、現在の日付を使用するようにスクリプトを設定する必要があります。

NULL日付列の値を取得する場合は、NVL関数を使用して代わりにロードしSYSDATEます。

PROGRAM_CHANGE_TS POSITION(37:47) DATE "NVL(:PROGRAM_CHANGE_TS, SYSDATE)"

BLANKとを混同しないでくださいNULL00/00/0000空白でもヌルでもありません。値として取得00/00/0000する場合は、 を使用しますDECODE

PROGRAM_CHANGE_TS POSITION(37:47) DATE "DECODE(:PROGRAM_CHANGE_TS, '00/00/0000', SYSDATE, :PROGRAM_CHANGE_TS)"

于 2015-01-08T06:28:48.100 に答える