2016-12-01 114 views
1

我想製作一個防止插入重疊日期的觸發器。例如: 如果我在2016年3月3日至2016年5月3日期間提供「Oferta」優惠,我無法在日期2/3/2016至2016年4月3日期間插入新優惠或4/3/2016至7/3/2016觸發錯誤mysql

我的SELECT檢查我相信的條件。如果發生這種情況,我不知道該怎麼做是錯誤的。我是新來的觸發器和Im有語法錯誤,我檢查觸發器語法,但無法找到問題...

DELIMITER $$ 
CREATE TRIGGER tri_check_date_overlap BEFORE INSERT ON Oferta 
FOR EACH ROW 
BEGIN 
    IF EXISTS(
     SELECT * FROM Oferta WHERE 
      (new.morada = morada AND new.codigo = codigo 
       AND ((new.data_inicio BETWEEN data_inicio AND data_fim) 
       OR new.data_fim BETWEEN data_inicio AND data_fim) 
      ) 
      ) 

      /*CALL raise_application_error(3001, 'Not odd number!'); */ 
      DECLARE msg varchar(255); 
      set msg = concat('Error: That right is not allowed!', cast(new.right as char)); 
      signal sqlstate '45000' set message_text = msg; 

END $$ 
DELIMITER ; 

回答

0

你的邏輯是確定的,我覺得你只是錯過後的「然後」條件「如果」和'結束如果'在觸發器結束之前。