使用 sql 加载程序将数据从 CSV 文件加载到 oracle table
Loading data from CSV file to oracle table using sql loader
我想在以下条件下将数据从 CSV 文件加载到 oracle table。
如果 table 为空,则只应将数据加载到 table 中,否则不应加载数据。
sql 加载程序是否可以满足此要求?还是我需要使用任何其他 ETL 工具,如 informatica?
无论您在哪个 OS 环境中工作,您可以始终使用 ORACLE_LOADER
使用 External tables 访问驱动程序。
来自 Oracle 文档 Choosing External Tables Versus SQL*Loader
The record parsing of external tables and SQL*Loader is very similar,
so normally there is not a major performance difference for the same
record format.
您所需要的只是目录对象上的 read/write。如果您可以创建一个(CREATE DIRECTORY YOUR_DIR AS '<directory_path>'
) 或请求其他超级用户给予适当的资助(GRANT READ ON DIRECTORY YOUR_DIR TO yourschema
) 就好了。
可以使用 EXECUTE IMMEDIATE
动态创建外部 Table
DECLARE
l_exists INT;
BEGIN
SELECT CASE
WHEN EXISTS ( SELECT 1
FROM yourmaintable
WHERE ROWNUM = 1
) THEN 1
ELSE 0 END
into l_exists from dual;
IF l_exists : = 0 THEN --If the Table is empty
EXECUTE IMMEDIATE q'{ CREATE TABLE your_ext_table -- Using the alternate
-- quoting mechanism
(col1 INT,
col2 VARCHAR2(20)
col3 DATE)
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER -- Use the ORACLE_LOADER driver to load your file.
DEFAULT DIRECTORY YOUR_DIR
ACCESS PARAMETERS
(RECORDS DELIMITED BY NEWLINE
FIELDS (col1 CHAR(2),
col2 VARCHAR2(20),
col3 VARCHAR2(20) date_format DATE mask "mm/dd/yyyy"
)
)
LOCATION ('yourfile.csv')
)}'
;
EXECUTE IMMEDIATE 'INSERT INTO yourmaintable (col1,col2,col3) --dynamic Insert
select * FROM your_ext_table';
END IF;
END;
/
您可以使用加载选项:INSERT
来实现它。
It requires the table to be empty before loading. SQL*Loader
terminates with an error if the table contains rows.
您可以参考:Loading Data into Empty Tables
干杯!!
我想在以下条件下将数据从 CSV 文件加载到 oracle table。
如果 table 为空,则只应将数据加载到 table 中,否则不应加载数据。
sql 加载程序是否可以满足此要求?还是我需要使用任何其他 ETL 工具,如 informatica?
无论您在哪个 OS 环境中工作,您可以始终使用 ORACLE_LOADER
使用 External tables 访问驱动程序。
来自 Oracle 文档 Choosing External Tables Versus SQL*Loader
The record parsing of external tables and SQL*Loader is very similar, so normally there is not a major performance difference for the same record format.
您所需要的只是目录对象上的 read/write。如果您可以创建一个(CREATE DIRECTORY YOUR_DIR AS '<directory_path>'
) 或请求其他超级用户给予适当的资助(GRANT READ ON DIRECTORY YOUR_DIR TO yourschema
) 就好了。
可以使用 EXECUTE IMMEDIATE
DECLARE
l_exists INT;
BEGIN
SELECT CASE
WHEN EXISTS ( SELECT 1
FROM yourmaintable
WHERE ROWNUM = 1
) THEN 1
ELSE 0 END
into l_exists from dual;
IF l_exists : = 0 THEN --If the Table is empty
EXECUTE IMMEDIATE q'{ CREATE TABLE your_ext_table -- Using the alternate
-- quoting mechanism
(col1 INT,
col2 VARCHAR2(20)
col3 DATE)
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER -- Use the ORACLE_LOADER driver to load your file.
DEFAULT DIRECTORY YOUR_DIR
ACCESS PARAMETERS
(RECORDS DELIMITED BY NEWLINE
FIELDS (col1 CHAR(2),
col2 VARCHAR2(20),
col3 VARCHAR2(20) date_format DATE mask "mm/dd/yyyy"
)
)
LOCATION ('yourfile.csv')
)}'
;
EXECUTE IMMEDIATE 'INSERT INTO yourmaintable (col1,col2,col3) --dynamic Insert
select * FROM your_ext_table';
END IF;
END;
/
您可以使用加载选项:INSERT
来实现它。
It requires the table to be empty before loading. SQL*Loader terminates with an error if the table contains rows.
您可以参考:Loading Data into Empty Tables
干杯!!