具有多个 when 子句的 HSQL 触发器
Posted
技术标签:
【中文标题】具有多个 when 子句的 HSQL 触发器【英文标题】:HSQL trigger with multiple when clause 【发布时间】:2012-11-17 04:21:27 【问题描述】:我们可以在 HSQL DB 中创建带有多个 WHEN 子句的触发器吗?像这样的东西:-
CREATE TRIGGER perosn_trig AFTER UPDATE ON person
REFERENCING NEW AS nwrow OLD as oldrow
FOR EACH ROW
when ( nwrow.person_id>100 )
( insert into TRIGLOG values ('PERSON_more_than_100',nwrow.person_id,SYSDATE) ),
When (nwrow.person_id<=100)
( insert into TRIGLOG values ('PERSON_less_than_100',nwrow.person_id,SYSDATE) )
;
此查询给出语法错误。 什么是正确的语法?
【问题讨论】:
【参考方案1】:目前不支持触发器中的多个 WHEN 子句。 WHEN 子句一般与简单条件一起使用,仅在必要时调用触发器。
对于更复杂的条件,请使用 CASE 或 IF 条件:
CREATE TRIGGER perosn_trig AFTER UPDATE ON person
REFERENCING NEW AS nwrow OLD as oldrow
FOR EACH ROW
BEGIN ATOMIC
IF ( nwrow.person_id>100 ) THEN
insert into TRIGLOG values ('PERSON_more_than_100',nwrow.person_id,SYSDATE);
ELSE
insert into TRIGLOG values ('PERSON_less_than_100',nwrow.person_id,SYSDATE);
END IF;
END
http://hsqldb.org/doc/2.0/guide/sqlroutines-chapt.html#src_psm_conditional
【讨论】:
以上是关于具有多个 when 子句的 HSQL 触发器的主要内容,如果未能解决你的问题,请参考以下文章
HSQL 触发器:用户缺少权限或找不到对象:NEWROW.ID
使用 HSQL 和 Spring Script Utils 创建触发器或过程
HSQL 触发器生成 SQL 错误:-458,SQLState: S1000 / java.lang.ArrayIndexOutOfBoundsException