ORA-00904: 标识符无效但表名和列名正确?

Posted

技术标签:

【中文标题】ORA-00904: 标识符无效但表名和列名正确?【英文标题】:ORA-00904: invalid identifier but table and column names are correct? 【发布时间】:2018-05-01 18:21:56 【问题描述】:

我有下面的 SQL 查询,但它给出了错误消息ORA-00904: "KUST_ADR"."KU_NR": invalid identifier,即使这些是正确的表和列名。还有什么原因?

update auf_adr
  set email = (select k.ku_email
               from auf_kopf k join
                    kust_adr ka
                    on k.kunr = ka.ku_nr
               where auf_adr.auf_nr = k.auf_nr and
                     ka.ku_adr_art = 1 and
                     auf_adr.email <> ka.ku_email and
                     (select sum(s.rg_anz)
                      from auf_stat s
                      where s.auf_nr = k.auf_nr
                     ) = 0
              )
    where auf_adr.adr_art = 2 and
          exists (select 1
                  from auf_kopf k join
                       kust_adr ka
                       on k.kunr = ka.ku_nr
                  where auf_adr.auf_nr = k.auf_nr and
                        ka.ku_adr_art = 1 and
                        auf_adr.email <> ka.ku_email and
                        (select sum(s.rg_anz)
                         from auf_stat s
                         where s.auf_nr = k.auf_nr
                        ) = 0
                  );

【问题讨论】:

请张贴表格结构 在更新语句中,没有"KUST_ADR"."KU_NR" 组合但ka.ku_nr,你确定这会给出错误..? 它的别名... 我看到这是别名,但消息无关紧要,即好像,没有别名。 如果您创建的表在列名周围使用双引号 ",则列名区分大小写。 【参考方案1】:

每个“where”子句行后都缺少一个“and”,这可能是问题所在。

where auf_adr.auf_nr = k.auf_nr AND

【讨论】:

检查你的表——它们是用小写字母创建的,表名和列名周围有双引号吗?如果是这样,如果您不在小写选择中的名称周围加上双引号,oracle 将给出错误。一旦你开始在表/列名周围使用双引号,oracle 会确保任何 sql 也有双引号和小写。如果您创建的表格没有双引号,它不会介意任何一种大小写(小写或大写)

以上是关于ORA-00904: 标识符无效但表名和列名正确?的主要内容,如果未能解决你的问题,请参考以下文章

ORA-00904: 无效的标识符,当列标题正确时

ORA-00904: "pass": 无效的标识符

ORA-00904: 相关子查询上的列名无效

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

错误报告:SQL 错误:ORA-00904::无效标识符 00904。00000 - “%s:无效标识符”

ORA-00904: 无效标识符 00904. 00000 - "%s: 无效标识符"