2014-01-15 5 views
1

트리거에서 RAISE 함수에 약간의 문제가 있습니다.Python/SQLite3 raise 함수 오류

CREATE TRIGGER CheckingDate 
BEFORE INSERT ON MyTable 
FOR EACH ROW 
WHEN NEW.Start_date > NEW.End_date 
BEGIN 
RAISE(ABORT, 'End_date must be in the future'); 
END; 

Start_dateend_dateSMALLDATETIMEStart_datedatetime('now')의 결과입니다 : 이것은 내 SQLite는 코드입니다.

다른 파이썬 2.7 프로그램에서 다른 모든 sql 스크립트를 sqlite3.complete_statement()으로 실행하면 Syntax Error near RAISE이됩니다. 누군가 왜 저에게 말할 수 있습니까? 나는 내 방아쇠에 ABORT, ROLLBACK 대신 ABORT 또는 SELECT CASE 또는 WHEN THEN을 시도했지만 여전히 오류가 발생합니다.

+0

을 내가 * 생각 * 당신은이'RAISE'이후 RAISE()를'() SELECT의'SQL 함수이다 사용해야 CREATE TRIGGER는 insert, update, delete, select 중 하나를 사용해야한다. –

답변

1

RAISE()은 SQL 함수이므로 명령문의 일부로 사용해야합니다. TRIGGERUPDATE, INSERT, DELETE 또는 SELECT 문만 허용합니다. SELECT에서 사용이 올바르게 오류를 트리거

CREATE TRIGGER CheckingDate 
BEFORE INSERT ON MyTable 
FOR EACH ROW 
WHEN NEW.Start_date > NEW.End_date 
BEGIN 
SELECT RAISE(ABORT, 'End_date must be in the future'); 
END; 

:

sqlite> insert into mytable values ('2030-1-1 20:20:20', datetime('now')); 
Error: End_date must be in the future 
+0

자습서가 거의 없지만 그 사실을 알지 못했습니다. 고마워요 :) – user3192222