首页 > 解决方案 > 为什么我在运行此代码时收到“无效标识符”oracle 错误?

问题描述

我正在尝试运行以下代码,但我收到 cb.state 的无效标识符错误,我不明白为什么?

INSERT INTO DWCUST (DWCUSTID, DWSOURCEIDBRIS, DWSOURCEIDMELB, FIRSTNAME, SURNAME, GENDER, PHONE, POSTCODE, CITY, STATE, CUSTCATNAME)
SELECT dwcustSeq.nextval, cb.custid, cm.custid, cb.fname, cb.sname, cb.gender, 
        cb.phone, cb.postcode, cb.city, cb.state, cc.custcatname
   FROM a2custbris cb
NATURAL JOIN a2custcategory cc
NATURAL JOIN a2custmelb cm
  WHERE cb.rowid NOT IN ( SELECT source_rowid FROM A2ERROREVENT );

如果它有帮助,state 和 cb.state 是 Oracle 中的蓝色文本,我不知道为什么。

预期结果:

没有错误,行添加到 dwcust

实际结果:

SQL 错误: ORA-00904:“cb.state”:无效标识符 00904。00000 -“%s:无效标识符”

任何帮助深表感谢!

标签: sqloraclesql-insert

解决方案


这意味着别名为cb( a2custbris) 的表不包含名称为 的列state

如果您在表格中看到它,请注意字母大小写。如果它被创建为将列名括在双引号中(您会看到它们不是大写,这是默认设置),那么您每次引用该列时都必须使用相同的字母大小写,例如

select cb."state"
from a2custbris cb

[编辑:关于无效号码]

这就是你正在做的事情:

INSERT INTO DWCUST (DWCUSTID,         --> dwcustseq.nextval
                    DWSOURCEIDBRIS,   --> cb.custid
                    DWSOURCEIDMELB,   --> null
                    FIRSTNAME,        --> cb.fname
                    SURNAME,          --> cb.sname
                    GENDER,           --> upper(cb.gender)
                    PHONE,            --> cb.phone
                    POSTCODE,         --> cb.postcode
                    CITY,             --> cb.city
                    STATE,            --> cb.state
                    CUSTCATNAME)      --> cc.custcatname

请注意前 3 列:那些对我来说看起来很可疑:

INSERT INTO DWCUST (DWCUSTID,         --> dwcustseq.nextval
                    DWSOURCEIDBRIS,   --> cb.custid
                    DWSOURCEIDMELB,   --> null

一切都匹配,但那三个不匹配。不应该cb.custid进去dwcustid吗?


推荐阅读