0

アプリケーション テーブルのアプリケーション ステータス行が変更されたときに学生のアプリケーション状態を自動的に更新するトリガーを作成しようとしています。私は 1 時間ほど Web をブラウジングしてきましたが、潜在的な回避策を見つけたにもかかわらずEXECUTE IMMEDIATE、目的の結果を達成できませんでした (EXECUTE IMMEDIATEバインドされていない変数エラーが発生していました)。

トリガーコード

CREATE OR REPLACE TRIGGER trg_applications
BEFORE INSERT OR UPDATE ON applications FOR EACH ROW
BEGIN 
  IF UPDATING THEN
  /* If the status is ACCEPTED, then approve the students application */
    SELECT CASE 
             WHEN get_status(:NEW.status_id) = 
                    LOWER('Applicant Accepted Offer')
             THEN student_accept_offer( :NEW.student_id )
       END
  FROM status; 
  END IF;
END;

get status メソッドは、新しいステータスが条件に一致するかどうかを確認するために a を返します。一致する場合は、以下を使用して行をVARCHAR2更新します。student_approvedautonomous_transaction

student_accept_offerコード

CREATE OR REPLACE FUNCTION student_accept_offer( this_stu_id NUMBER )
  RETURN VARCHAR2 IS 
  PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
  UPDATE students 
 SET students.student_on_placement = 1 
   WHERE students.student_id = this_stu_id;
  COMMIT;
  RETURN 'Student has approved application';
END student_accept_offer;

この関数は、トリガーの外部でテストすると意図したとおりに機能しますが、トリガーに埋め込まれているとPLS-00428エラーがスローされます。ステータスが一致した場合に更新時にこの関数を自動的に起動できるようにするために、これを回避する方法について誰かが私を正しい方向に向けることができますか?

御時間ありがとうございます

編集 - 私が参照しているテーブル ここに画像の説明を入力

4

1 に答える 1