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

Oracle PL/SQL复合触发器中CASE WHEN变量赋值报错问题咨询

Oracle PL/SQL复合触发器CASE WHEN赋值错误解决方法

你的实现方式不正确,问题出在你在SQL查询语句中直接写入了PL/SQL的赋值操作(:=),这违反了SQL语法规则:SQL中的CASE WHEN仅用于返回值,不能在分支中执行PL/SQL的变量赋值逻辑。

正确实现方式

方式一:直接使用PL/SQL CASE语句赋值(推荐)

无需借助SELECT ... FROM dual,直接在PL/SQL逻辑中完成判断与赋值:

-- 查询获取contractEnd变量值
SELECT contract_end INTO contractEnd FROM contract WHERE contract_id = :new.expense_job;

-- 通过PL/SQL CASE语句直接赋值
contractIDCollection(iterator).ended := 
  CASE WHEN contractEnd IS NOT NULL THEN 1 ELSE 0 END;

方式二:SQL查询赋值(符合语法但不推荐)

如果坚持用SQL查询的方式,需要将CASE返回的值通过INTO子句赋值给目标变量,而非在CASE分支内写赋值操作:

SELECT CASE WHEN contractEnd IS NOT NULL THEN 1 ELSE 0 END
INTO contractIDCollection(iterator).ended
FROM dual;

错误原因说明

原代码中,你将PL/SQL的赋值语句contractIDCollection(iterator).ended := 1写在了SQL的CASE分支里,Oracle SQL解析器无法识别:=这个PL/SQL专属的赋值操作符,因此抛出ORA-00905: missing keyword错误,同时上层的SQL语句也被忽略。

内容的提问来源于stack exchange,提问作者Joe Moore

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:20:24