HSQLDB 在触发器中声明行
Posted
技术标签:
【中文标题】HSQLDB 在触发器中声明行【英文标题】:HSQLDB DECLARE ROW IN A TRIGGER 【发布时间】:2012-09-21 10:15:20 【问题描述】:大家好,我尝试在触发器中从我的选择语句中获取一行,但我得到了这个错误意外令牌:R
CREATE TRIGGER PUBLIC.TRIGGERNAME AFTER UPDATE ON PUBLIC.CLIENTE_OFFERENTE
REFERENCING NEW ROW AS NUOVO
FOR EACH ROW
BEGIN ATOMIC
DECLARE r RECORD;
SET r=(SELECT offerta.IDIMMOBILE as ID, immobile.prezzomax as costo FROM PUBLIC.OFFERTA join immobile on immobile.idImmobile=offerta.idImmobile WHERE IDOFFERTA=NUOVO.IDOFFERTA);
IF NUOVO.STATO='Venduto'THEN
INSERT INTO PUBLIC.VENDITE(IDCLIENTE,IDIMMOBILE,COSTO)VALUES(NUOVO.IDCLIENTE,r.ID,r.costo);
END IF;
END
【问题讨论】:
我在这里只看到一个触发因素:全大写标题会触发“叹息。Facepalm”反应。 【参考方案1】:您不能声明 RECORD 类型的变量。
您想从您的 select 语句中获取两个值。因此需要声明两个变量。
BEGIN ATOMIC
DECLARE VAR_ID INT;
DECLARE VAR_COSTO INT;
SET (VAR_ID, VAR_COSTO) =(SELECT offerta.IDIMMOBILE as ID, immobile.prezzomax as costo FROM PUBLIC.OFFERTA join immobile on immobile.idImmobile=offerta.idImmobile WHERE IDOFFERTA=NUOVO.IDOFFERTA);
IF NUOVO.STATO='Venduto'THEN
INSERT INTO PUBLIC.VENDITE(IDCLIENTE,IDIMMOBILE,COSTO)VALUES(NUOVO.IDCLIENTE,VAR_ID,VAR_COSTO);
END IF;
END
【讨论】:
以上是关于HSQLDB 在触发器中声明行的主要内容,如果未能解决你的问题,请参考以下文章
HSQLDB 触发器语法 - 不可能在触发器内进行子查询吗?
LibreOffice Base 的 HSQLDB 触发器更新