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 删除触发器导致子查询出现问题

HSQLDB 触发器语法 - 不可能在触发器内进行子查询吗?

LibreOffice Base 的 HSQLDB 触发器更新

HSQLDB 触发器 - 引用新表

Quartz Scheduler +HSQLDB 巨大的 .lobs 文件。尺寸永远增加

HSQLDB 在使用嵌套查询并且数据库处于只读模式时触发 OutOfMemoryError