2017-05-02 5 views
1

このトリガは、今日の日付よりもdobのあるレコードを挿入して挿入し、今日の日付よりもdobの少ないレコードを挿入するときに例外を発生させるためのものです。トリガエラー - postgresql

私はこれをやった:

私は「2018年9月9日」DOBにデータを挿入、私は正しいことをして何を今日より前でなければならない誕生日を "例外を取得
/* This checks that the dob is before today's date and throws an exception if not */ 

CREATE FUNCTION check_dateofbirth() RETURNS trigger AS $check_dateofbirth$ 
DECLARE dob date; 
BEGIN 
    SELECT passenger.dob INTO dob 
    FROM passenger 
    WHERE passengerid = passengerid; 

    IF dob > now() THEN 
    RAISE EXCEPTION 'Date of birth must be earlier than today'; 

    END IF; 
    RETURN NEW; 
END; 
$check_dateofbirth$ LANGUAGE plpgsql; 
/* this is used to run the function above */ 
CREATE TRIGGER insert_dateofbirth 
BEFORE INSERT OR UPDATE ON passenger 
FOR EACH ROW EXECUTE PROCEDURE check_dateofbirth(); 

が欲しいです。しかし、私が '1996-09-15'としてdobを使ってデータを挿入すると、dobが今日より早く挿入されるため、間違った例外が発生します。エラーは私のdobのフォーマットと関係がありますか? yyyy/mm/ddの代わりにdd/mm/yyyyにする必要がありますか?

答えて

0

試してください:あなたは、テーブルを照会する必要はありません

CREATE FUNCTION check_dateofbirth() RETURNS trigger AS $check_dateofbirth$ 
DECLARE dob date; 
BEGIN 
    IF NEW.dob > now() THEN 
    RAISE EXCEPTION 'Date of birth must be earlier than today'; 

    END IF; 
    RETURN NEW; 
END; 
$check_dateofbirth$ LANGUAGE plpgsql; 

- ちょうど新しいレコードを確認してください。

また、WHERE passengerid = passengeridは常にすべての行を返します。

関連する問題