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; 

在意识到connection.execute()方法不喜欢的分号之前,经过很长一段时间的争斗。 只要你的SQL语句不能以一个结束,从一个文件中读取就行。

那么,我find了一个解决多个sql语句,只是使用exec:

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

如您所见,node-oracledb的connection.execute()方法只执行一条语句。 这与其他语言相同。 不要把你的SQL语句放在一个SQL * Plus文件中,而应该把它们作为一个string数组放在一个.js文件中。 然后处理数组的每个元素。 这将使您更好地控制事务和error handling。