为什么在运行此代码时出现“无效标识符” oracle错误?

时间:2019-10-28 07:57:11

标签: sql oracle sql-insert

我正在尝试运行以下代码,但是我收到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:无效的标识符”

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这意味着别名为cba2custbris)的表不包含名称为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

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

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

一切都匹配,但是那3个不匹配。 cb.custid是否不应该进入dwcustid