我需要限制某些条件下新行的插入。如果可插入值与某些条件不匹配,则数据库必须抛出异常。 首先我尝试使用CONSTRAINT对象,但得到以下错误: “SQLException:不支持的功能:语句中的检查约束中的子查询”。
然后我尝试使用触发器:
在插入valuta之前创建TRIGGER tg_val 作为新的参考新行 对于每个行(new.simvol为空) SIGNAL SQL_STATE'45000'
又出现了另一个错误:SQLException:意外令牌:SIGNAL。
答案 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语句来验证您的状况。