NodeJs + OracleDB +加载sql文件

时间:2015-06-25 14:03:42

标签: node.js oracle file

问题很简单,我无法使用oracledb连接器加载sql文件。似乎它不会超过一个句子。

知道如何加载sql文件吗?

var oracledb = require('oracledb');
var fs = require('fs');

fs.readFile("test.sql", function(err, data) {
    if (err) {
        throw err;
    }

    connect(data.toString());
});

function connect(sql) {
    oracledb.getConnection({
            user: "****",
            password: "***",
            connectString: "****"
        },
        function(err, connection) {
            if (err) {
                console.error(err.message);
                return;
            }
            connection.execute(
                sql, [],
                function(err, result) {
                    if (err) {
                        console.error(err.message);
                        doRelease(connection);
                        return;
                    }
                    console.log(result.metaData);
                    console.log(result.rows);
                    doRelease(connection);
                });
        });
}

function doRelease(connection) {
    connection.release(
        function(err) {
            if (err) {
                console.error(err.message);
            }
        });
}

它会抛出错误:

ORA-00911:无效字符

sql在这里:

select * from DEFECTO;
select * from ESQUEMA;

3 个答案:

答案 0 :(得分:1)

在认识到它是connection.execute()方法不喜欢的分号之前,已经与此进行了长时间的斗争。只要你的SQL语句没有以一个结尾,读取文件就可以了。

答案 1 :(得分:0)

好吧,我找到了多个sql语句的解决方法,并且只使用了exec:

exec('echo exit | sqlplus -S ****/***@//****:1521/**** @sqlfile.sql', ["bash"],
                function(error, stdout, stderr) {
                    callback();
                }
            );

答案 2 :(得分:0)

正如您所发现的,node-oracledb的connection.execute()方法只执行一个语句。这与其他语言相同。不要将SQL语句放在SQL * Plus文件中,而是尝试将它们作为字符串数组放在.js文件中。然后处理数组的每个元素。这将使您更好地控制事务和错误处理。