尝试插入触发器以更新字段 OpenOffice Base

Posted

技术标签:

【中文标题】尝试插入触发器以更新字段 OpenOffice Base【英文标题】:Trying to insert a Trigger to update a field OpenOffice Base 【发布时间】:2017-03-01 12:09:54 【问题描述】:

我正在尝试从 OpenOffice 4.1.3 中的命令行插入触发器,并且我正在使用以下配置: 工具 --> 选项 --> OpenOffice --> Java --> "使用..." 选中 --> 类路径 --> 添加包 --> "我从这里下载的文件 (hsqldb.jar) : Access2Base http://www.access2base.com/access2base.html

所以...这是我要执行的代码:

CREATE TRIGGER  "t1" AFTER UPDATE ON "DesgloseCostes"
FOR EACH ROW
BEGIN ATOMIC
update "Costes" set "importenoiva" = (NEW."importe");
END

这给了我以下错误:

1: Unexpected end of command: BEGIN in statement [CREATE TRIGGER  "t1" AFTER UPDATE ON "DesgloseCostes"
FOR EACH ROW
BEGIN]

PS:我从以下位置执行此代码:Tools --> SQL....

PS2:我在 mysql 中遇到了类似的问题,但我在那里解决了它,将分隔符更改为 //

这是一个示例代码:

CREATE TRIGGER  "t1" AFTER UPDATE ON "DesgloseCostes"
FOR EACH ROW
BEGIN ATOMIC
update "Costes" set "importenoiva" = (NEW."importe");
END//

感谢您的帮助!


我正在放置新的 hsqldb 文件夹,但我遇到了同样的错误,我尝试选择此文件夹、超级文件夹、超级/超级文件夹并尝试只放置 hsqldb/lib/hsqldb .jar 文件作为包,但仍然没有

【问题讨论】:

【参考方案1】:

检查 HSQLDB JAR 版本并确保它高于 2.20 版。触发器定义需要额外的一行 REFERENCING ...

您的代码正在更新“成本”表中的所有行。 UPDATE 语句需要一个带有条件的 WHERE 子句,以仅选择要更新的行。

CREATE TRIGGER  "t1" AFTER UPDATE ON "DesgloseCostes"
REFERENCING NEW ROW AS NEWROW
FOR EACH ROW
BEGIN ATOMIC
update "Costes" set "importenoiva" = NEWROW."importe" WHERE ... ;
END//

【讨论】:

我知道我的代码正在更新“成本”中的所有行,我试图放置一个触发器以查看它是否有效,但我的代码仍然出现相同的错误:更新后创建触发器“t1”在“DesgloseCostes”上,每行都将新行称为 NEWROW BEGIN 原子更新“成本”设置“importenoiva”=NEWROW.“importe”;结束// 再次嗨,现在我正在尝试更新我的 hsqldb 版本的 OpenOffice,但我认为它不起作用或者我做错了什么:( 您需要使用“外部”HSQLDB 数据库。在此处查看配置详细信息forum.openoffice.org/en/forum/viewtopic.php?p=162653#p162653

以上是关于尝试插入触发器以更新字段 OpenOffice Base的主要内容,如果未能解决你的问题,请参考以下文章

触发器实现多表之间的增加删除及更新

触发器处理表更新

Oracle 建立触发器比较两张表相同字段的数据,再更新另一个字段

数据库中两张表之间的数据同步实现思路(增加删除更新)Mysqlsqlserver

用于插入更新的 SQL 插入触发器

如何创建一个 Postgres 11 触发器函数,该函数在插入或更新到表“a”时在表“b”中插入一个新行?