Oracle SQL:任何人都可以帮我解决Error(2,32):PLS-00049:错误的绑定变量'WORKED_HOURS'

问题描述 投票:1回答:2

任何人都可以帮我解决错误(2,32):PLS-00049:错误的绑定变量'WORKED_HOURS'

    CREATE OR REPLACE TRIGGER uprava_prac_casu
    BEFORE
    UPDATE OF worked_hours
    ON Attendance_of_employee
    FOR EACH ROW
    BEGIN
    IF (:new.worked_hours>15) THEN :worked_hours:=15; END IF;

    IF (:new.worked_hours<3) THEN :worked_hours:=3; END IF;
    END;
    /


Trigger UPRAVA_PRAC_CASU compiled

Errors: check compiler log

从编译器日志:错误(2,32):PLS-00049:错误的绑定变量'WORKED_HOURS'

然后我试过这个:

CREATE OR REPLACE TRIGGER uprava_prac_casu
    BEFORE
    UPDATE OF worked_hours
    ON Attendance_of_employee
    FOR EACH ROW
    BEGIN
    IF (:new.worked_hours>15) THEN :old.worked_hours:=15; END IF;

    IF (:new.worked_hours<3) THEN :old.worked_hours:=3; END IF;
    END;
    /




> Error report -
>     ORA-04085: nemožno zmeniť hodnotu referenčnej premennej OLD
>     04085. 00000 -  "cannot change the value of an OLD reference variable"
>     *Cause:    Old values can only be read and not changed.
>     *Action:   Do not attempt to change an old variable.
sql oracle triggers
2个回答
1
投票

你可能只是向后设置你的“旧”和“新”。或者,您可能想要调整“新”值。我在猜测后者:

CREATE OR REPLACE TRIGGER uprava_prac_casu
BEFORE UPDATE OF worked_hours
ON Attendance_of_employee
FOR EACH ROW
BEGIN
    IF (:new.worked_hours > 15) THEN :new.worked_hours := 15; END IF;
    IF (:new.worked_hours < 3) THEN :new.worked_hours := 3; END IF;
END;

您收到错误是因为您只能更新触发器中的新值,而不是旧值。


0
投票

因为它明确表示你无法修改:old.worked_hours

您无法更改OLD结构的字段值;尝试这样做会引发ORA-04085错误。您可以修改NEW结构的字段值。

© www.soinside.com 2019 - 2024. All rights reserved.