1

私はPL SQLを初めて使用し、テーブルAのフィールドが更新されたときに起動するトリガーを作成してから、テーブルBのフィールドを更新しようとしています.

2 番目のテーブルには、関連するレコードがないか、多数の行が含まれている可能性があります (この場合、すべての行を更新する必要があります)。

テーブル A (HNCMA.AGREEMENT_EOI.STATUS と呼ばれる) で更新される値に応じて、テーブル B (LMD.LM_ACTIVITY_.ACTIVITY_STATUS_CODE と呼ばれる) で更新される値に影響を与えたいと考えています。

これは私がこれまでに得たものですが、次のエラーが発生しています。

PLS-00103: 次のいずれかを予期しているときに、記号「=」が検出されました: :=.(@%;

どんな助けでも大歓迎です!!!!

ありがとう


CREATE OR REPLACE TRIGGER TR_UPDATE_STATUS

AFTER UPDATE OF STATUS ON HNCMA.AGREEMENTS_EOI
FOR EACH ROW 

DECLARE

VarStatus Varchar(10);
VarStatusCode Int;

BEGIN

if :new.Status = 'Proposed' then VarStatus = 2 else
if :new.Status = 'Recommended' then VarStatus = 5 else
if :new.Status = 'Funded' then VarStatus = 5 else
if :new.Status = 'Completed' then VarStatus = 6 else
if :new.Status = 'Withdrawn' then VarStatus = 34 
end if

UPDATE
(SELECT LMD.LM_ACTIVITY.ACTIVITY_STATUS_CODE
FROM (HNCMA.AGREEMENTS_EOI INNER JOIN HNCMA.PROJECT ON HNCMA.AGREEMENTS_EOI.PROJECTID = HNCMA.PROJECT.PROJECTID) INNER JOIN (LMD.LM_POLYGON_PROJECT_REL INNER JOIN LMD.LM_ACTIVITY ON LMD.LM_POLYGON_PROJECT_REL.LMID = LMD.LM_ACTIVITY.LMID) ON HNCMA.AGREEMENTS_EOI.CASENO = LMD.LM_POLYGON_PROJECT_REL.LOCAL_PROJECT_NAME
WHERE (((HNCMA.PROJECT.CATCHMENT)='Murray') AND ((HNCMA.AGREEMENTS_EOI.CASENO)= :old.CASENO ));) s
Set s.ACTIVITY_STATUS_CODE = varstatuscode


End;

更新*

@heaps さん、ご協力ありがとうございます。CASE 関数を含めるようにコードを修正し、フォーマット エラーを修正しました。これは私がこれまでに得たものです(更新ステートメントを取り出すと機能します)が、「SQLコマンドが正しく終了していません」というエラーが表示されます...

ヘルプ!?!

トリガーの作成または置換 TR_UPDATE_LMDB_STATUS1

AFTER UPDATE OF STATUS ON HNCMA.AGREEMENTS_EOI
FOR EACH ROW 

DECLARE

VarStatus Varchar(50);
VarStatusCode Int;

BEGIN

VarStatus := :new.status;

CASE varstatus

WHEN 'Proposed' THEN VarstatusCode := 2;
WHEN 'Recommended' THEN VarStatusCode := 5;
WHEN 'Funded' THEN VarStatusCode := 5;
WHEN 'Completed' THEN VarStatusCode := 6;
WHEN 'Withdrawn' THEN VarStatusCode := 34;

END CASE;

UPDATE LMD.LM_ACTIVITY
SET ACTIVITY_STATUS_CODE = VarStatusCode
FROM (HNCMA.AGREEMENTS_EOI INNER JOIN HNCMA.PROJECT ON HNCMA.AGREEMENTS_EOI.PROJECTID = HNCMA.PROJECT.PROJECTID) INNER JOIN (LMD.LM_POLYGON_PROJECT_REL INNER JOIN LMD.LM_ACTIVITY ON LMD.LM_POLYGON_PROJECT_REL.LMID = LMD.LM_ACTIVITY.LMID) ON HNCMA.AGREEMENTS_EOI.CASENO = LMD.LM_POLYGON_PROJECT_REL.LOCAL_PROJECT_NAME
WHERE (((HNCMA.PROJECT.CATCHMENT)='Murray') AND ((HNCMA.AGREEMENTS_EOI.CASENO)= :old.CASENO )) ;

End;
4

1 に答える 1

1

varstatus=2 を に置き換え、Varstatus:=2 最後にセミコロンを付けて; 、もう一度やり直してください

編集された..更新された質問>>

エラーは、コマンドSQL command not properly endedで確認する必要があるためですUPDATE

またはコマンドでFROM試す方が良いと思うので、更新内の 問題句のようです。オラクルはUPDATEのFROM句をサポートしていません。代わりに、クエリとして使用できますUPDATE... WHERE EXISTS..MERGE

于 2013-01-23T08:22:03.753 に答える