带有nodeJS的Oracle插入导致缺少关键字错误

时间:2017-11-13 08:06:51

标签: node.js oracle

我正在尝试使用nodeJS

创建表并将数据插入到oracle db中

下面是我的查询代码

oracledb.getConnection(
    {
        user: userId,
        password: password,
        connectString: `(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ${host})(PORT = ${port}))(CONNECT_DATA = (SID = ${sid})))`
    },
    function (err, connection) {
        if (err) {
            errorHandler(err);
            return;
        }
        connection.execute(
            query,
            function (err, result) {
                if (err) {
                    errorHandler(err);
                    oracleFunctions.connection.doRelease(connection, errorHandler);
                    return;
                }

                successHandler(result);
                oracleFunctions.connection.doRelease(connection, errorHandler);
            });
    });

作为查询,我使用以下内容创建表格。

begin
execute immediate 'CREATE TABLE "table0" ("Channel" VARCHAR(128),
"Pay_mode" VARCHAR(128),
"Product_group" VARCHAR(128),
"PivotDimension" VARCHAR(128),
"Values" DECIMAL(18,6))';
execute immediate 'CREATE TABLE "table1" ("Channel" VARCHAR(128),
"Pay_mode" VARCHAR(128),
"Product_group" VARCHAR(128),
"PivotDimension" VARCHAR(128),
"Values" DECIMAL(18,6))';
end;

我也使用以下内容将数据插入到创建的表中。

INSERT ALL
INTO "table0" VALUES ('AM' , 'PP' , 'NP ISP Annuity' , '1' , '0.11' )
INTO "table0" VALUES ('AM' , 'PP' , 'NP ISP Annuity' , '2' , '0.26' )
SELECT * from dual;

这些查询在Jetbrain的DataGrip上完美运行。

我首先执行create table查询,当返回成功响应时,我将行插入表中。

然而,奇怪的是,当我执行代码时,会发生两个错误

Error: ORA-00955: name is already used by an existing object
ORA-06512: at line 2

用于创建表格和

Error: ORA-00905: missing keyword

用于插入表格。

更奇怪的是,表格被创建得很好但插入不会发生。

我已多次检查以确保create table只运行一次,并且每个表只插入一次。我可能做错了什么?

1 个答案:

答案 0 :(得分:0)

这里没什么奇怪的。你被要求做一些令人怀疑的事情,而甲骨文试图完成它,不再是。

首先,在使用Oracle时,您几乎不应该以动态方式创建表。 ORA-955表示您不止一次执行了您的请求。你创建了表,好的。你要求再次创建它。你在等什么回答? Oracle表示这些表已经存在。我想没什么奇怪的。

ORA-905,很可能意味着您尝试将select * from dual作为INSERT ALL语句的一部分执行。 Oracle正在等待下一个INTO语句但得到SELECT而不是它,因此它表示语法错误。再一次,没什么奇怪的