我有一個HSQLDB中的觸發器奇怪的問題。我已經多次檢查過這個語法,但是我沒有發現任何錯誤。我現在認爲在觸發器內部創建子查詢可能是不可能的。HSQLDB觸發器語法 - 是否不可能在觸發器內進行子查詢?
這是代碼:
create trigger activate_member after update on member
REFERENCING OLD AS old NEW AS new
for each row
begin atomic
IF new.active = FALSE AND old.active = TRUE then
insert into member_inactive
(
member,
since,
until
)
values (
new.id,
(select since from member_active where
member = new.id AND since = (select max(since) from member_active where
member = new.id group by member)),
curdate()
);
ELSEIF new.active = TRUE AND old.active = FALSE then
insert into member_active (member, since) values
(new.id, curdate());
end if;
end;
我覺得我做了一切正確的:我對IF
和ELSIEF
報表內的每個查詢分號,並end if
後尾隨分號。
但我仍然收到此錯誤信息:
SEVERE SQL Error at 'database.sql' line 125:
"create trigger activate_member after update on member
REFERENCING OLD AS old NEW AS new
for each row
begin atomic
IF new.active = FALSE AND old.active = TRUE then
insert into member_inactive
(
member,
since,
until
)
values (
new.id,
(select since from member_active where member = new.id AND since = (select max(since) from member_active where member = new.id group by member)),
curdate()
)"
unexpected end of statement: required: ; : line: 17
org.hsqldb.cmdline.SqlTool$SqlToolException
但在這裏我要補充一個分號?我認爲問題是insert
中的子查詢,但這沒有意義。
可能是begin atomic
有問題。但是我沒有其他辦法可以在沒有觸發器的情況下擁有if-else語句!
沒了那個沒有意義可言,因爲它插入語句內。 ..'意外結束的聲明:必需:):行:16 ' – reox