你好,你们这些美丽的人。
我正在尝试使用连接到 OracleDB 的 node.js 创建 REST API,但我正在绞尽脑汁地试图让这些愚蠢的绑定(bind)变量正常工作。
这是我的代码:
app.get('/mailsummary/:SCHEMA', function (req, res) {
"use strict";
oracledb.getConnection(connAttrs, function (err, connection) {
if (err) {
// Error connecting to DB
res.set('Content-Type', 'application/json');
res.status(500).send(JSON.stringify({
status: 500,
message: "Error connecting to DB",
detailed_message: err.message
}));
return;
}
connection.execute("select * from :SCHEMA.event@db3", [req.params.SCHEMA], {
outFormat: oracledb.OBJECT // Return the result as Object
}, function (err, result) {
if (err || result.rows.length < 1) {
res.set('Content-Type', 'application/json');
var status = err ? 500 : 404;
res.status(status).send(JSON.stringify({
status: status,
message: err ? "Error getting vendor mailing summary." : "Vendor or DB does nto exist.",
detailed_message: err ? err.message : ""
}));
} else {
res.contentType('application/json').status(200).send(JSON.stringify(result.rows));
}
// Release the connection
connection.release(
function (err) {
if (err) {
console.error(err.message);
} else {
console.log("GET /mailsummary/" + req.params.SCHEMA + " : Connection released");
}
});
});
});
});
由于某种原因,我收到错误
OracleDB : ORA-01036: illegal variable name/number
如果我删除绑定(bind)变量,分配一个静态值并删除 sql 语句后的“req.params.SCHEMA”并将括号留空,则它可以工作。
connection.execute("select * from peeps.event@db3", [], {
outFormat: oracledb.OBJECT // Return the result as Object
我知道我拉入绑定(bind)变量的方式一定很简单,但我却很费劲。
请帮助我,欧比旺·克诺比……你是我唯一的希望。
谢谢!
最佳答案
绑定(bind)变量是用于在数据库和客户端程序之间传输数据的占位符。您正在尝试传输 SQL 语句的文本 - 您的用法将不起作用。
此绑定(bind)行为并非特定于 node-oracledb;这就是 Oracle 的工作方式。它有助于将数据和语句文本分开。
有一些常规绑定(bind)信息:http://docs.oracle.com/database/122/LNOCI/binding-and-defining-in-oci.htm#GUID-77A26CEA-1C41-46A2-866C-622F9FEB5482
关于javascript - Node.js + OracleDB : ORA-01036: illegal variable name/number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40642659/