ORA-00923错误求助:Oracle SQL语句FROM关键字位置异常排查
问题排查:ORA-00923: FROM keyword not found where expected
错误根源
从报错日志里的完整SQL语句可以定位问题:列别名使用了单引号包裹,这违反了Oracle的语法规则。
错误SQL片段:
select ROWNUM as 'rowNum', o.NAME as 'name', o.OWNER_ALIAS as 'ownerAlias' from ...
Oracle中,单引号仅用于定义字符串常量,不能用来包裹列别名。如果别名是合法标识符(无特殊字符、非关键字),可以直接省略引号;若需保留别名大小写或包含特殊字符,需用双引号替代单引号。
修正后的SQL
方式1:省略引号(推荐,无特殊需求时使用)
select ROWNUM as rowNum, o.NAME as name, o.OWNER_ALIAS as ownerAlias from MMONEY_SERVICE.EW_WALLET_OWNER o, MMONEY_SERVICE.EW_AGENT a, MMONEY_SERVICE.EW_WALLET_OWNER_CAT_TYPE t where o.OWNER_ID = a.AGENT_ID and o.OWNER_TYPE_ID=1 and a.AGENT_LEVEL=1 and a.OWNER_CAT_ID=t.OWNER_CAT_ID and t.CAT_CODE='MERCHANT' and o.STATUS=1 order by ROWNUM asc
方式2:使用双引号(需保留别名大小写时使用)
select ROWNUM as "rowNum", o.NAME as "name", o.OWNER_ALIAS as "ownerAlias" from MMONEY_SERVICE.EW_WALLET_OWNER o, MMONEY_SERVICE.EW_AGENT a, MMONEY_SERVICE.EW_WALLET_OWNER_CAT_TYPE t where o.OWNER_ID = a.AGENT_ID and o.OWNER_TYPE_ID=1 and a.AGENT_LEVEL=1 and a.OWNER_CAT_ID=t.OWNER_CAT_ID and t.CAT_CODE='MERCHANT' and o.STATUS=1 order by ROWNUM asc
额外优化建议
建议改用显式JOIN语法替代隐式逗号连接,提升SQL可读性和维护性:
select ROWNUM as rowNum, o.NAME as name, o.OWNER_ALIAS as ownerAlias from MMONEY_SERVICE.EW_WALLET_OWNER o join MMONEY_SERVICE.EW_AGENT a on o.OWNER_ID = a.AGENT_ID join MMONEY_SERVICE.EW_WALLET_OWNER_CAT_TYPE t on a.OWNER_CAT_ID = t.OWNER_CAT_ID where o.OWNER_TYPE_ID=1 and a.AGENT_LEVEL=1 and t.CAT_CODE='MERCHANT' and o.STATUS=1 order by ROWNUM asc
内容的提问来源于stack exchange,提问作者Hashini Udara
相关产品推荐
相关产品推荐

