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