NodeJs+OracleDB+加载sql文件



问题很简单,我无法使用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;

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

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

在意识到connection.execute()方法不喜欢分号之前,与此斗争了很长时间。只要您的SQL语句没有以一结束,从文件中读取就可以了。

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

相关内容

  • 没有找到相关文章

最新更新