2016-05-12 5 views
0

私は、SQLクエリを通じてCTLファイルを動的に作成するプロセスを持っています。そして、ファイル名をoracleテーブルに挿入する必要があります。私は、クエリに表示するファイル名を取得することができますが、それはそれを拒否し続けます。 ctlsは数字だけを受け入れますか?なぜなら、数値にハードコードすればうまくいくからです。私はそれをvarcharにハードコードすれば、それを拒否します。ロード中にファイル名を挿入するにはどうすればよいですか?sqlldrの制御ファイルでvarcharを使用

  ' LEAD_TIME,' || chr (10) || 
     ' DELIVERY_TIME,' || chr (10) || 
     ' DELIVERY_NO,' || chr (10) || 
     ' FREQUENCY,' || chr (10) || 
     ' FREQUENCY_UNIT,' || chr (10) || 
     ' MODE_TYPE,' || chr (10) || 
     ' AUDIT_LOG_ID "' || MAX(audit_log_id) || '",' || chr (10) || 
     ' STAGING_STATUS_ID "1",' || chr (10) || 
     ' FILENAME "&fname",' || chr (10) || 
     ' LINENO SEQUENCE(1)' || chr (10) || 
     ')' || chr (10) 
    from audit_log 
    where filename_orig = '&fname'; 

spool off 

ここでは、sqlldrを実行した結果を示します。ファイル名は正しく表示されますが、エントリは拒否されます。

 Column Name     Position Len Term Encl Datatype 
------------------------------ ---------- ----- ---- ---- --------------------- 
VENDOR        FIRST  * ,  CHARACTER 
COMM_CONTRACT      NEXT  * ,  CHARACTER 
SERV_CONTRACT      NEXT  * ,  CHARACTER 
ADDR_CHAIN       NEXT  * ,  CHARACTER 
STORE        NEXT  * ,  CHARACTER 
SITE_GROUP       NEXT  * ,  CHARACTER 
START_DATE       NEXT  * ,  CHARACTER 
END_DATE        NEXT  * ,  CHARACTER 
ORDER_DAY       NEXT  * ,  CHARACTER 
ORDER_TIME       NEXT  * ,  CHARACTER 
LEAD_TIME       NEXT  * ,  CHARACTER 
DELIVERY_TIME      NEXT  * ,  CHARACTER 
DELIVERY_NO       NEXT  * ,  CHARACTER 
FREQUENCY       NEXT  * ,  CHARACTER 
FREQUENCY_UNIT      NEXT  * ,  CHARACTER 
MODE_TYPE       NEXT  * ,  CHARACTER 
AUDIT_LOG_ID       NEXT  * ,  CHARACTER 
    SQL string for column : "26004459" 
STAGING_STATUS_ID     NEXT  * ,  CHARACTER 
    SQL string for column : "1" 
FILENAME        NEXT  * ,  CHARACTER 
    SQL string for column : "filenamexxx.csv" 
LINENO             SEQUENCE (1, 1) 

value used for ROWS parameter changed from 64 to 51 

Table DISA_STAGING_SUPP_SCHEDULE: 
    0 Rows successfully loaded. 
    6 Rows not loaded due to data errors. 
    0 Rows not loaded because all WHEN clauses were failed. 
    0 Rows not loaded because all fields were null. 
+0

挿入するテーブルの構造(列とデータ型)はなんですか?ロードされているデータは何ですか?6行が拒否されているエラーは何ですか? –

答えて

1

ORA-00984: column not allowed hereのようなエラーが表示されます。 filenamexxx.csvは引用符で囲まれていないため、値ではなく列名と見なされています。あなたはそれは次のように生成されるように変更することができます。

FILENAME "'filenamexxx.csv'" 

とクエリが置換変数の周りの単一引用符脱出したことをやって:

 ' FILENAME "''&fname"'',' || chr (10) || 

またはあなたが好む場合、代替メカニズムを引用:

+0

ありがとうございました。最初のスニペットは私の問題を解決しました。あなたは私の心を救った。 – Alkey29

関連する問題