HSQL 触发器:用户缺少权限或找不到对象:NEWROW.ID

Posted

技术标签:

【中文标题】HSQL 触发器:用户缺少权限或找不到对象:NEWROW.ID【英文标题】:HSQL Triggers : user lacks privilege or object not found: NEWROW.ID 【发布时间】:2018-11-29 09:51:08 【问题描述】:

我正在尝试在更新后在 hsql 中实现触发器 我有一个称为组件表的表,并且在该表中更新时我想使用插入触发器后将其记录到另一个表中,为此我正在做

CREATE TABLE IF NOT EXISTS "component"(
   "id" INTEGER IDENTITY,
   "name" VARCHAR(100),
   "configuration" LONGVARCHAR,
   "owner_id" INTEGER   );

CREATE TABLE IF NOT EXISTS "component_audit"(
   "id" INTEGER IDENTITY,
   "component_id" INTEGER ,
   "action" VARCHAR(20),
   "activity_time" BIGINT,
   "user_id" INTEGER,
   FOREIGN KEY ("component_id") REFERENCES "component"("id") ON UPDATE RESTRICT ON DELETE CASCADE
);

    CREATE TRIGGER trig AFTER INSERT ON "component"
       REFERENCING NEW ROW AS newrow
       FOR EACH ROW
       INSERT INTO "component_audit" ("id","component_id","action","activity_time","user_id")
       VALUES (DEFAULT, 1, newrow.id, 123, 1);

在运行 HSQL 时抛出错误

原因:org.hsqldb.HsqlException: 用户缺少权限或对象 未找到:NEWROW.ID

这是由于我的 id 列在“id”中,因为我需要它在小型大写字母中(默认 HSQLDB 为大写) 如何传递我的变量替换?

【问题讨论】:

【参考方案1】:

只需使用与 CREATE TABLE 语句中相同的命名即可。

CREATE TRIGGER trig AFTER INSERT ON "component"
   REFERENCING NEW ROW AS newrow
   FOR EACH ROW
   INSERT INTO "component_audit" ("id","component_id","action","activity_time","user_id")
   VALUES (DEFAULT, 1, newrow."id", 123, 1);

【讨论】:

以上是关于HSQL 触发器:用户缺少权限或找不到对象:NEWROW.ID的主要内容,如果未能解决你的问题,请参考以下文章

HsqldbException:用户缺少权限或找不到对象:TABLE

是啥导致错误“用户缺少权限或找不到对象:FieldName”

用户缺少权限或找不到对象:XXXX

HSQLDB SqlTool 抛出用户缺少权限或找不到对象

HSQLDB:用户缺少权限或找不到对象错误

HSQLDB:用户缺少权限或找不到对象:USERS