我正在使用netbeans构建一个javafx项目,并且正在使用derby数据库。我有两张桌子,BOOK
和ISSUE
.我想创建一个BEFORE INSERT trigger ON ISSUE
表,用于检查 BOOK 表中名为"可用"的布尔字段的值。按下名为"BookIssue"的按钮应检查以下触发器。如果"可用"的值为 false,则应弹出警告消息,否则必须执行插入操作。我无法正确获取触发命令。
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.
有人可以帮我吗!我找不到任何其他地方与德比有类似的问题。
我想你想要: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;