使用sqlloader nodeJS批量插入CSV文件到Oracle DB

时间:2017-11-13 05:35:10

标签: node.js oracle csv

我正在尝试在oracle数据库上使用nodeJS加载csv文件。

从这里的文档https://docs.oracle.com/cd/B19306_01/server.102/b14215/ldr_concepts.htm,似乎可以加载整个csv文件,并通过实现以下内容传递给Oracle。

load data
infile 'example.dat'  "str '|\n'"
into table example
fields terminated by ',' optionally enclosed by '"'
(col1 char(5),
 col2 char(7))

其中数据类似于

hello,world,|
james,bond,|

但是当我在nodeJS上使用oracledb库实现它时,它会抛出ORA-00900 invalid SQL statement错误

以下是我实施查询的方式。

oracledb.getConnection(
    {
        user: userId,
        password: password,
        connectString: `(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ${host})(PORT = ${port}))(CONNECT_DATA = (SID = ${sid})))`
    },
    function (err, connection) {
        if (err) {
            errorHandler(err);
            return;
        }
        connection.execute(
            query,
            function (err, result) {
                if (err) {
                    errorHandler(err);
                    oracleFunctions.connection.doRelease(connection, errorHandler);
                    return;
                }

                successHandler(result);
                oracleFunctions.connection.doRelease(connection, errorHandler);
            });
    });

我的查询如下

LOAD DATA
infile 'path\to\the\file.csv' "str '\n'"
INTO TABLE e1_000090000_ADS_R_PPLaps
FIELDS TERMINATED BY ',' optionally enclosed by '"'

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您正在混合使用SQL*Loader实用程序(Oracle提供的用于数据加载的单独二进制文件)和实际有效的SQL语法。您不能只将SQL*Loader参数作为SQL语句传递,它们不是!如果要通过Node.js加载文件,则必须读取文件,解析内容并将其转换为实际的INSERT INTO语句,这正是SQL*Loader为您所做的。