我正在使用netbeans构建一个javafx项目,并且正在使用derby数据库。
我有两个表,BOOK
和ISSUE
。
我想创建一个BEFORE INSERT trigger ON ISSUE
表,它检查BOOK表中名为“available”的布尔字段的值。
按下一个名为BookIssue的按钮,应检查以下触发器。
如果“available”的值为false,则会弹出警告消息,否则必须执行insert操作。
我无法正确获得触发命令。
String trigger = "CREATE TRIGGER toIssue NO CASCADE BEFORE INSERT ON ISSUE"
+ " FOR EACH ROW"
+ " BEGIN"
+ " SELECT isAvail from BOOK WHERE id = '"+ bookId + "'"
+ " IF isAvail = false"
+ " THEN RAISE_APPLICATION_ERROR(-20001,'Books Out of stock')"
+ " END IF"
+ " END";
databasehandler.execQuery(trigger);
我在日志中遇到以下异常:
Exception at execQuery:dataHandlerSyntax error: Encountered "BEGIN" at line 1, column 71.
有人可以帮我这个!我找不到任何与德比有类似问题的地方。
答案 0 :(得分:0)
我想你想要:ExecuteNonQuery()
。
此外,这条线是可疑的:
SELECT isAvail from BOOK WHERE id = '"+ bookId + "'"
触发器主体看起来应该更像这样:
DECLARE v_avail boolean;
SELECT b.isAvail INTO v_avail
FROM BOOK b
WHERE b.id = NEW.ID;
IF NOT v_isAvail THEN
RAISE_APPLICATION_ERROR(-20001,'Books Out of stock')"
END IF;