PLS-00049: 错误的绑定变量

PLS-00049: bad bind variable

我正在尝试编写触发器,但出现此错误:

Error(44,3): PLS-00049: bad bind variable 'NEW.NEW_REGION_CODE'
Error(45,5): PLS-00049: bad bind variable 'NEW.NEW_REGION_DESC'
Error(46,5): PLS-00049: bad bind variable 'NEW.NEW_MYHR_REGION_BI_CODE'
Error(47,3): PLS-00049: bad bind variable 'NEW.NEW_MEDBEN_NUMOF_OPTIONS'
Error(48,5): PLS-00049: bad bind variable 'NEW.NEW_DENTALBEN_NUMOF_OPTIONS'
Error(49,3): PLS-00049: bad bind variable 'NEW.NEW_NUMOFHRS_WORKD_60PRORATION'
Error(50,5): PLS-00049: bad bind variable 'NEW.NEW_NUMOFHRS_WORKD_80PRORATION'
Error(51,5): PLS-00049: bad bind variable 'NEW.NEW_CREATED_BY'
Error(52,3): PLS-00049: bad bind variable 'NEW.NEW_CREATED_ON'

这是我的触发代码:

CREATE OR REPLACE 
TRIGGER TRG_UPDT_REGION
BEFORE UPDATE ON REGION 
FOR EACH ROW
BEGIN
    INSERT INTO REGION_HST 
( 
REGION_CODE, 
REGION_DESC, 
MYHR_REGION_BI_CODE, 
MEDBEN_NUMOF_OPTIONS, 
    DENTALBEN_NUMOF_OPTIONS, 
NUMOFHRS_WORKED_60PRORATION,
NUMOFHRS_WORKED_80PRORATION,
CREATED_BY,
CREATED_ON, 
UPDATED_BY, 
UPDATED_ON,
DELETED_BY,
DELETED_ON, 
    NEW_REGION_CODE,
NEW_REGION_DESC, 
NEW_MYHR_REGION_BI_CODE, 
NEW_MEDBEN_NUMOF_OPTIONS, 
NEW_DENTALBEN_NUMOF_OPTIONS, 
    NEW_NUMOFHRS_WORKD_60PRORATION,
NEW_NUMOFHRS_WORKD_80PRORATION, 
NEW_CREATED_BY, 
NEW_CREATED_ON, 
NEW_UPDATED_BY, 
NEW_UPDATED_ON
)
    VALUES 
    ( 
:OLD.REGION_CODE, 
:OLD.REGION_DESC, 
:OLD.MYHR_REGION_BI_CODE, 
    :OLD.MEDBEN_NUMOF_OPTIONS,
:OLD.DENTALBEN_NUMOF_OPTIONS,
:OLD.NUMOFHRS_WORKED_60PRORATION, 
    :OLD.NUMOFHRS_WORKED_80PRORATION, 
:OLD.CREATED_BY,
:OLD.CREATED_ON,
:OLD.UPDATED_BY, 
    :OLD.UPDATED_ON,
APEX_APPLICATION.G_USER,
SYSDATE, 
    :NEW.NEW_REGION_CODE,
:NEW.NEW_REGION_DESC, 
:NEW.NEW_MYHR_REGION_BI_CODE, 
    :NEW.NEW_MEDBEN_NUMOF_OPTIONS, 
:NEW.NEW_DENTALBEN_NUMOF_OPTIONS, 
    :NEW.NEW_NUMOFHRS_WORKD_60PRORATION, 
:NEW.NEW_NUMOFHRS_WORKD_80PRORATION, 
:NEW.NEW_CREATED_BY, 
    :NEW.NEW_CREATED_ON, 
APEX_APPLICATION.G_USER,
SYSDATE);
END;

我搜索了具有相同问题的问题,但其中 none 解决了我的问题。我还检查了拼写错误,我确信拼写是正确的。

该错误意味着 :NEW 伪记录没有包含您使用的名称的字段,这意味着 table 触发器所针对的字段没有包含这些名称的列。

根据您使用的 :OLD 值,您刚刚在列名中引入了虚假的 NEW_ 前缀;所以 values 子句应该是:

VALUES 
( 
    :OLD.REGION_CODE, 
    ...
    :OLD.UPDATED_ON,
    APEX_APPLICATION.G_USER,
    SYSDATE, 
    :NEW.REGION_CODE,
    :NEW.REGION_DESC, 
    :NEW.MYHR_REGION_BI_CODE, 
    :NEW.MEDBEN_NUMOF_OPTIONS, 
    :NEW.DENTALBEN_NUMOF_OPTIONS, 
    :NEW.NUMOFHRS_WORKD_60PRORATION, 
    :NEW.NUMOFHRS_WORKD_80PRORATION, 
    :NEW.CREATED_BY, 
    :NEW.CREATED_ON, 
    APEX_APPLICATION.G_USER,
    SYSDATE
);