You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQL新增ACCESS计算列遇ORA-00923报错求助

SQL查询报错排查:ORA-00923 解决方法

需求说明

需要编写SQL查询,新增名为ACCESS的列:当DI_ACCESS_NAME字段存在有效数据时显示'yes',否则显示'no'。现有表数据如下:

EMPLID  RCD DI_ACCESS_NAME  ACCESS
123450  0   TK              Y
123450  1   HCS-P           Y
123450  1   SI              Y
123450  3   NATO            Y
123451  0                   N
123451  1                   N
123452  0   HCS-P           Y
123453  0                   N

用户编写的查询语句

语句1

SELECT emplid, empl_rcd, di_access_name, (CASE WHEN coalesce(di_access_name,'') <> '' THEN 'yes' else 'no' end) as access FROM PS_DI_SEC_ACCESS;

语句2

SELECT emplid, empl_rcd, di_access_name,(CASE WHEN di_access_name IS NOT NULL THEN 'yes' else 'no' end) as access
FROM PS_DI_SEC_ACCESS;

报错信息

ORA-00923: FROM keyword not found where expected
00923. 00000 - "FROM keyword not found where expected"
*Cause:
*Action:
Error at Line: 5 Column: 116

报错原因分析

ACCESS是Oracle的保留关键字,直接使用as access作为列别名时,数据库会将其解析为SQL关键字,导致语法解析逻辑混乱,进而抛出"FROM关键字未找到"的错误。

解决方法

将列别名access用双引号""括起来,明确告诉数据库这是自定义列名而非关键字。同时优化语句2的逻辑(若DI_ACCESS_NAME可能为空字符串而非NULL,需补充空字符串判断):

修改后的语句1

SELECT emplid, empl_rcd, di_access_name, 
       (CASE WHEN COALESCE(di_access_name, '') <> '' THEN 'yes' ELSE 'no' END) AS "ACCESS" 
FROM PS_DI_SEC_ACCESS;

修改后的语句2(优化逻辑版)

SELECT emplid, empl_rcd, di_access_name,
       (CASE WHEN di_access_name IS NOT NULL AND di_access_name <> '' THEN 'yes' ELSE 'no' END) AS "ACCESS" 
FROM PS_DI_SEC_ACCESS;

内容的提问来源于stack exchange,提问作者Bach-Nga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:10:39