I am very new to PL SQL and I am trying to write a Trigger which will fire when a field in Table A is updated, then go and update a field in Table B.
The second table may not have any related records, or it may have many rows (and is this case, I need all the rows to be update).
Depending on what value is updated in Table A (called HNCMA.AGREEMENT_EOI.STATUS), I'd like to effect what is updated in table B (called LMD.LM_ACTIVITY_.ACTIVITY_STATUS_CODE).
This is what I've got so far, but I am getting this error:
PLS-00103: Encountered the symbol "=" when expecting one of the following: :=.(@%;
Any help would be much appreciated!!!!
Thanks
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;
UPDATE*
Thanks @heaps for your help. I've amended my code to include the CASE function and have fixed my formatting errors. This is what I've got so far (and it works when I take out the update statement), but I am now getting an "SQL command not properly ended" error...
Help!?!
CREATE OR REPLACE TRIGGER 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;
elsifnotelse ifto combine multiple ifs. See the manual for details: docs.oracle.com/cd/E11882_01/appdev.112/e25519/…