2016-09-22 114 views
0

所以我有一個MySQL數據庫的作品與此觸發SQLite觸發器插入錯誤

delimiter $$ 
create trigger update_memberID 
after update on memberdata 
for each row 
Begin 
if not (new.visits <=> old.visits) then 
    insert into membervisit (memberID) values (new.memberID); 
    end if; 
if not (new.memberID <=> old.memberID) then 
update membervisit set memberID = new.memberID where memberID =  old.memberID; 
    end if; 
end$$ 
delimiter ; 

現在我想安裝在SQLite和一切同一個數據庫,但是這個觸發器工作。我有一個SQLite的觸發器的代碼是

"CREATE TRIGGER IF NOT EXISTS `membership.update_memberID` " + 
" AFTER UPDATE " + 
" ON memberdata " + 
" FOR EACH ROW BEGIN " +  
" SELECT CASE WHEN (new.visits <= old.visits) THEN " + 
    " INSERT INTO 'membership.membervisit' ('memberID') values (new.memberID);" + 
      "END;\n" + 

" SELECT CASE WHEN (new.memberID <= old.memberID) THEN " + 
    "UPDATE `membership.membervisit` SET `memberID` = `new.memberID` WHERE `memberID` =`old.memberID`;" + 
      "END;" + 
"END;" 

我收到的錯誤是

Exception in thread "main" java.sql.SQLException: near "INSERT": syntax error 
    at org.sqlite.core.NativeDB.throwex(NativeDB.java:397) 
    at org.sqlite.core.NativeDB._exec(Native Method) 
    at org.sqlite.jdbc3.JDBC3Statement.executeUpdate(JDBC3Statement.java:116) 
    at SQLiteSetup.main(SQLiteSetup.java:62) 
C:\Users\Owner\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1 
BUILD FAILED (total time: 0 seconds) 

它指的鑲齒是

" INSERT INTO 'membership.membervisit' ('memberID') values (new.memberID);" 

任何幫助,將不勝感激 感謝

回答

0

CASE是一個表達式;你不能將它用於語句。

但是在SQLite中,觸發器可以有一個WHEN clause。 (在SQLite中,NULL安全的比較是IS)。

CREATE TRIGGER update_memberID_visits 
AFTER UPDATE OF visits ON memberdata 
FOR EACH ROW 
WHEN NEW.visits IS NOT OLD.visits 
BEGIN 
    INSERT INTO membervisit(memberID) 
    VALUES (NEW.memberID); 
END; 

CREATE TRIGGER update_memberID_memberID 
AFTER UPDATE OF memberID ON memberdata 
FOR EACH ROW 
WHEN NEW.memberID IS NOT OLD.memberID 
BEGIN 
    UPDATE membervisit 
    SET memberID = NEW.memberID 
    WHERE memberID = OLD.memberID; 
END; 
+0

工作完全謝謝你。 SQLite對我來說是一個新的野獸,我真的很感激它。 – user3288887