scala - HSQL 触发器:用户缺少权限或找不到对象:NEWROW.ID
问题描述
我正在尝试在更新后在 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 是大写)我如何传递我的变量替换?
解决方案
只需使用与 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);
推荐阅读
- c++ - 类内部和外部的静态 constexpr 元组之间的区别
- prestashop - 在 presta 1.7 中清空 ps_stock
- java - Mockito.verify 与 KafkaProducer 和 ProducerRecord
- c# - 按字符串属性对对象进行排序,最后是空字符串
- javascript - 添加类后如何保持 HTML 元素抖动/移动
- symfony - 按innerJoin 表与学说排序
- java - Java LocalDateTime/ OffsetDateTime 到 Swift 4
- visual-studio-code - VSCode 扩展激活事件 onCreate file
- java - Lombok builder 未生成 builder 方法,推断类型不符合上限
- wordpress - Wordpress:将作为自定义字段的日期与当前日期进行比较