问题很简单,我无法使用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文件中。然后处理数组中的每个元素。这将使您能够更好地控制事务和错误处理。