您可以apply an SQL operator,如NVL(:PAESE, 'XXX')
。在引用字段名稱之前注意冒號。原位:
LOAD DATA
infile 'gian.csv'
REPLACE
INTO TABLE tar
fields terminated by ',' optionally enclosed by '"'
TRAILING NULLCOLS
(
IDTAR,
DATABACKUP DATE "YYYY-MM-DD",
PAESE "NVL(:PAESE, 'XXX')",
R_ELEM NULLIF (R_ELEM=BLANKS)
)
隨着一個虛擬表:
創建表焦油( idtar數, databackup日期, PAESE VARCHAR2(10)非空, r_elem VARCHAR2(10) );
和CSV,其中第三和第四線對的nullif()
條款尾隨空格:
1,2017-08-01,A,B
2,2017-08-02,C,
3,2017-08-03,,
4,2017-08-04,"",
然後與該控制文件在運行獲得:
SQL*Loader: Release 11.2.0.4.0 - Production on Fri Aug 4 19:39:23 2017
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Commit point reached - logical record count 4
和日誌說:
...
Column Name Position Len Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
IDTAR FIRST * , O(") CHARACTER
DATABACKUP NEXT * , O(") DATE YYYY-MM-DD
PAESE NEXT * , O(") CHARACTER
SQL string for column : "NVL(:PAESE, 'XXX')"
R_ELEM NEXT * , O(") CHARACTER
NULL if R_ELEM = BLANKS
Table TAR:
4 Rows successfully loaded.
0 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.
...
查詢表顯示所有四行都已加載:
set null "<null>"
select * from tar;
IDTAR DATABACKU PAESE R_ELEM
---------- --------- ---------- ----------
1 01-AUG-17 A B
2 02-AUG-17 C <null>
3 03-AUG-17 XXX <null>
4 04-AUG-17 XXX <null>
顯然將'XXX'
替換爲您要使用的實際默認字符串。您說'空白字符串',因此您可以使用"NVL(:PAESE, ' ')"
來插入單個空格字符。儘管你不能使用空的字符串,因爲就Oracle而言,它與null是相同的。
你是什麼意思的一個空白字符串?一個空字符串與Oracle中的空字符相同,所以你是指一個或多個空白字符?包括您的表格DDL和CSV文件中的示例數據也會有所幫助。 –
一個空字符串與Oracle中的null相同.Ahh !!! 這就是要點! –
[「Oracle數據庫目前將長度爲零的字符值視爲空值,但在未來版本中可能不會如此,並且Oracle建議您不要將空字符串視爲空值。」](https ://docs.oracle.com/database/121/SQLRF/sql_elements005.htm#SQLRF30037) –