是否可以在HSQLDB中丢弃特定条件下的插入?

时间:2010-11-30 08:14:46

标签: triggers insert hsqldb

我需要限制某些条件下新行的插入。如果可插入值与某些条件不匹配,则数据库必须抛出异常。 首先我尝试使用CONSTRAINT对象,但得到以下错误: “SQLException:不支持的功能:语句中的检查约束中的子查询”。

然后我尝试使用触发器:

在插入valuta之前创建TRIGGER tg_val  作为新的参考新行  对于每个行(new.simvol为空)  SIGNAL SQL_STATE'45000'

又出现了另一个错误:SQLException:意外令牌:SIGNAL。

1 个答案:

答案 0 :(得分:0)

该错误可能表示在此上下文中使用的HSQLDB版本不支持SIGNAL语句。 HSQLDB 2.0.1(目前RC2)支持这一点,使用SQLSTATE(不是指南中当前提到的SQL_STATE):

CREATE TRIGGER tg_val BEFORE INSERT ON valuta REFERENCING NEW ROW AS new FOR EACH ROW WHEN (new.simvol IS NULL) SIGNAL SQLSTATE '45000'

从您尝试使用带有子查询的检查约束可以清楚地看出,您希望使用比NOT NULL约束更复杂的检查条件。在这种情况下,使用BEGIN ... END块作为触发器,以便从不同的表(包括目标表)执行任何SELECT语句来验证您的状况。