我需要从作为输入接收的 .csv 文件填充我的外部表。在我的 .csv 文件中,我有 3 个字段,分别是:
我想要的是找到一种方法,使用以下格式填充外部表中的数据:
我该怎么做?
这就是我创建 EXTERNAL_TABLE 的方式:
CREATE TABLE EXT_TABLE
(
"JOB" VARCHAR2(255 BYTE) COLLATE "USING_NLS_COMP",
"ORDER_DATE" VARCHAR2(255 BYTE) COLLATE "USING_NLS_COMP",
"START" VARCHAR2(255 BYTE) COLLATE "USING_NLS_COMP",
"END" VARCHAR2(255 BYTE) COLLATE "USING_NLS_COMP"
) DEFAULT COLLATION "USING_NLS_COMP"
ORGANIZATION EXTERNAL
( TYPE ORACLE_LOADER
DEFAULT DIRECTORY "DATA_PUMP_DIR"
ACCESS PARAMETERS
( RECORDS DELIMITED BY DETECTED NEWLINE NOLOGFILE NOBADFILE NODISCARDFILE READSIZE=10000000 CREDENTIAL 'DWH'
FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' CONVERT_ERROR REJECT_RECORD DATE_FORMAT DATE MASK 'YYYYMMDDHH24MISS' DATE_FORMAT TIMESTAMP MASK 'YYYYMMDDHH24MISSFF6' NOTRIM MISSING FIELD VALUES ARE NULL
)
LOCATION
( 'https://swiftobjectstorage.eu-frankfurt-1.oraclecloud.com/v1/frn2gep9qi8i/INPUT/myfile.csv'
)
)
REJECT LIMIT 25500000
PARALLEL ;
我会使用字符串(即你已经做了的,
varchar2
数据类型)。它将允许所有值成为外部表的一部分。我认为这只是 CSV 文件和目标表之间的中间步骤。
在这种情况下,您将在外部表中拥有所有这些值,但是 - 当将它们传输到目标表中的
date
数据类型列时,请使用 to_date
函数,例如
SQL> alter session set nls_date_Format = 'dd.mm.yyyy hh24:mi';
Session altered.
SQL> select
2 to_date('4/12/2023' , 'dd.mm.yyyy hh24:mi') val1,
3 to_date('4/12/2023 08:00', 'dd.mm.yyyy hh24:mi') val2
4 from dual;
VAL1 VAL2
---------------- ----------------
04.12.2023 00:00 04.12.2023 08:00
SQL>
两个“日期”(带和不带时间部分)均已正确修改为有效的
date
数据类型值。