触发器中的函数 - 表是变异错误

时间:2018-03-20 23:46:04

标签: sql database oracle

我应该做一个不允许更新或插入行中的工具'价值高于该职位平均工资的30%(按职能计算)。如果该值较高,则触发器将精确设置该值(平均值* 130%)。 计算平均值的函数(它在数据包中的包 - packet1):

FUNCTION AVG_SALARY(POSITION POSITIONS.NAME%TYPE)RETURN NUMBER IS 
    AVRG NUMBER;
BEGIN
    SELECT AVG(S.SALARY) INTO AVRG
    FROM STAFF S, POSITIONS P
    WHERE S.ID_POSITION=P.ID_POSITION AND P.NAME=POSITION
    GROUP BY P.NAME;
END;

触发:

CREATE OR REPLACE TRIGGER TRIGGER1
BEFORE UPDATE OF SALARY
OR INSERT 
ON STAFF
FOR EACH ROW
DECLARE
    POS POSITIONS.NAME%TYPE;
    AVRG2 NUMBER;
BEGIN
    SELECT NAME INTO POS
    FROM POSITIONS
    WHERE ID_POSITION= :NEW.ID_POSITION ;
    AVRG2 := PACKET1.AVG_SALARY(POS);
    IF :NEW.SALARY > AVRG2*1.3 THEN
        :NEW.SALARY := AVRG2*1.3;
    END IF;
END;

我得到表变异的错误,触发器/函数可能看不到它。 请帮忙

0 个答案:

没有答案