【问题标题】:Node.js + OracleDB : ORA-01036: illegal variable name/numberNode.js + OracleDB:ORA-01036:非法变量名称/编号
【发布时间】:2017-03-31 06:32:49
【问题描述】:

你好漂亮的人。

我正在尝试使用连接到 OracleDB 的 node.js 创建 REST API,但我正在努力让这些愚蠢的绑定变量正常工作。

这是我的代码:

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

如果我删除绑定变量,分配一个静态值并在 sql 语句后删除“req.params.SCHEMA”并将括号留空,它可以工作。

connection.execute("select * from peeps.event@db3", [], {
            outFormat: oracledb.OBJECT // Return the result as Object

我知道我拉入绑定变量的方式很简单,但我把头发拉出来了。

请帮助我欧比旺·克诺比……你是我唯一的希望。

谢谢!

【问题讨论】:

  • 通过所有这些测试,我有时也设法以某种方式得到“ORA-00903: invalid table name\n”。虽然我很肯定表名是正确的......但也许绑定变量正在添加一些不稳定的东西?

标签: javascript node.js oracle node-oracledb


【解决方案1】:

绑定变量是用于在数据库和客户端程序之间传输数据的占位符。您正在尝试传输 SQL 语句的文本 - 您的用法将不起作用。

此绑定行为并非特定于 node-oracledb;这是甲骨文的工作方式。它有助于将数据和语句文本分开。

有一些一般的绑定信息在:http://docs.oracle.com/database/122/LNOCI/binding-and-defining-in-oci.htm#GUID-77A26CEA-1C41-46A2-866C-622F9FEB5482

【讨论】:

  • 谢谢克里斯托弗!有没有更好的方法可以将页面中的变量转置到 SQL 语句中?
  • 拥有有效变量的白名单并拒绝其他任何变量。
猜你喜欢
  • 2013-01-06
  • 2011-10-05
  • 1970-01-01
  • 1970-01-01
  • 2020-07-29
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多