2017-04-20 4 views
0

Student_before_update TriggerでEnrolledDateの将来のエラーメッセージが表示されるようにするにはどうすればよいですか?私は将来の日付を持つ学生のEnrolledDateを更新した場合、エラーメッセージが表示されるはずですBEFORE UPDATEトリガーを作成するに取り組んでいます

-- Create a trigger that will prevent an update to a student table if EnrolledDate is in the future 
 

 
USE College ; 
 

 
DROP TRIGGER IF EXISTS Student_Before_Update; 
 

 
DELIMITER $$ 
 

 
     CREATE TRIGGER Student_Before_Update 
 
     BEFORE UPDATE ON Student 
 
     FOR EACH ROW 
 
     
 
     BEGIN 
 
     
 
\t IF NEW.EnrolledDate > '2016-10-18' THEN 
 
\t \t \t \t SIGNAL SQLSTATE VALUE '45000' 
 
\t \t \t \t SET MESSAGE_TEXT= 'Enrolled date may not be in the future'; 
 
\t \t END IF; 
 

 
     END $$ 
 

 
DELIMITER ; 
 

 
UPDATE Student 
 
SET EnrolledDate= DATE(now()) 
 
WHERE ID= 1; 
 

 
UPDATE Student 
 
SET EnrolledDate= DATE_ADD(now(),INTERVAL 1 DAY) 
 
WHERE ID=1;

みなさん、こんにちは、

。たとえば、登録された生徒のレコードに最後に挿入された日付は「2016-10-18」なので、その日付の後の他のレコードには、「登録された日付が未来ではない可能性があります」というエラーメッセージが表示されます。私は文字通りこれを何時間も働いていましたが、とにかく私はやっていません。誰か助けてくれますか?ここまでは私のコードです。

答えて

0

あなたはMySQLで直接行うことはできませんが、hereことを行うことができますハックがあります:また、代わりにハードコードされた日付のGetDate()を提供EDIT 1

IF NEW.EnrolledDate > GetDate() THEN   
    DECLARE dummy INT; 

    SELECT 
    'Your meaningful error message goes here 
    INTO dummy 
     FROM mytable 
     WHERE mytable.id=new.id 
END IF; 

は、 EnralledDateと仮定すると、それは、MySQLエディタで赤いラインを有しているMySQLの

+0

あるので、コードを調整する日付フィールド

EDIT 2、確かです。それは予期しない識別子を言う。 RAISERROR – User445555

+0

なぜハードコーディングされた日付を保持できないのですか? – User445555

+0

ああ...あなたがMySQL – bc004346

関連する問題