I would like to write a trigger which blocks deleting records from table and blocks decreasing salary on update. It works well as two seperate triggers, but I would like to merge it into one.
Here is my trigger after merging:
  CREATE OR REPLACE TRIGGER test
    BEFORE DELETE OR UPDATE
    ON emp
    FOR EACH ROW
    BEGIN
      IF UPDATING THEN
        IF :NEW.sal < :OLD.sal THEN
          raise_application_error(-20500, 'You cannot decrease emp salary');
        END IF;
      ELSE DELETING THEN
        raise_application_error(-20500, 'You cannot delete records from emp');
      END IF;
    END;
The problem is when I try to update or delete record I get an error:
04098. 00000 -  "trigger '%s.%s' is invalid and failed re-validation"
*Cause:    A trigger was attempted to be retrieved for execution and was
           found to be invalid.  This also means that compilation/authorization
           failed for the trigger
I think that there is a problem around this line - BEFORE DELETE OR UPDATE because as I know if I FOR EACH ROW statment I should write is as BEFORE UPDATE on sal, but then I don't know how to join BEFORE DELETE statment into this.
EDIT: 
Problem was around ELSE statment. It should be changed to ELSIF
 
                        
Your IF statement syntax is incorrect. It should be:
I also combined the two IF statements used in the UPDATING case into one to keep it simpler.
EDIT
In the case where you don't want to allow salaries to be decreased another possible solution is to quietly change the salary back to its original value, as in: