2014-01-06 9 views
7

私はPostgreSQLの初心者です。 student_marksに応じて、グレードは、自動的に(上記の90符と同様に更新されるようにfill_grade_autoの名前:(PL/SQL言語)私はPostgresql各行の他の列の値を変更または更新する1つの列の値に基づいてトリガーします。

id    serial, 
student_name varchar(50), 
student_marks integer, 
grade   varchar(1) 

は、今私はトリガーを作成したい学生のテーブルで唯一の4の列を持っています)、B(60以上90未満)、Cグレードで休息する。

このトリガーは、各行の挿入または更新後に起動する必要があります。私はさまざまな方法を試みましたが、成功しませんでした。

+0

であなたの試みから – iandotkelly

+5

良い質問と良い答えをいくつかのコードを含めてください - 地獄は、それが閉じている理由???それは本当に有用です! –

答えて

11

あなたはそれを

CREATE OR REPLACE FUNCTION set_grade() 
RETURNS TRIGGER 
AS $$ 
BEGIN 
    NEW.grade := CASE WHEN NEW.student_marks >= 90 THEN 'A' 
        WHEN NEW.student_marks BETWEEN 60 AND 89 THEN 'B' 
        ELSE 'C' END; 

    RETURN NEW; 
END $$ LANGUAGE plpgsql; 

CREATE TRIGGER set_grade_trigger 
BEFORE INSERT OR UPDATE ON students 
FOR EACH ROW 
    EXECUTE PROCEDURE set_grade(); 

この方法を行うことができます:あなたはあなたの質問は、被写体に少し曖昧であるため、CASEにグレードの境界線を調整する必要があるかもしれませんが。単語を読む単語の場合、90の値はどのグレードにも属しません。したがって、私はここに私の方法(A: 90<=marks, B: 60<= marks<90, c: marks<60)それを解釈するために

を自由を取ったSQLFiddleデモ

+0

それは役に立ちましたか?あなたの質問にもっと助けが必要ですか? – peterm

+0

ありがとうございました。それは、私がpl/sqlの学習に本当に力を注ぐ必要があることだけを思い出させるものです。 –

+0

ありがとう! Stupeditorsは良い質問を閉じる –

関連する問題