Oracle SQL执行报ORA-00904 NEW_SALARY无效标识符问题咨询
ORA-00904报错原因分析
你遇到的报错是Oracle SQL的标准语法限制导致的,核心原因是:同一层SELECT子句中定义的别名,不允许在同层级的SELECT子句里直接引用。
SQL的执行逻辑里,同一层级的字段计算优先级高于别名解析,你在当前SELECT语句中给SALARY+1500定义了别名NEW_SALARY,紧接着就用这个别名计算新的年薪字段,此时数据库还没有完成别名的解析,无法识别NEW_SALARY这个标识符,就会抛出对应的报错。
解决方案
有两种常用的修复方式:
方式1:直接重复计算逻辑
不需要使用别名,直接把NEW_SALARY对应的计算逻辑复用在年薪计算的位置即可:
SELECT FIRST_NAME, SALARY, SALARY+1500 NEW_SALARY, SALARY*12 CURRENT_ANNUAL_SALARY, (SALARY+1500)*12 NEW_ANNUAL_SALARY FROM EMPLOYEES;
方式2:嵌套子查询提前定义别名
先通过子查询定义好NEW_SALARY别名,再在外层查询中引用该别名:
SELECT FIRST_NAME, SALARY, NEW_SALARY, SALARY*12 CURRENT_ANNUAL_SALARY, NEW_SALARY*12 NEW_ANNUAL_SALARY FROM ( SELECT FIRST_NAME, SALARY, SALARY+1500 NEW_SALARY FROM EMPLOYEES ) t;
该限制是Oracle SQL的原生规则,和你使用的livesql运行平台没有关联,所有Oracle执行环境下都要遵循该规则。
内容的提问来源于stack exchange,提问作者Harsh Mehta
相关产品推荐
相关产品推荐

