坏绑定变量?

时间:2018-02-23 14:43:08

标签: sql oracle plsql database-trigger

尝试编译以下代码并接收以下变量的错误绑定变量错误:NEW.UTC_OFFSET,NEW.DATA_DATE,NEW.HR,NEW.HR_NUM,NEW.DATA_CODE。

create or replace TRIGGER INS_VALS
AFTER INSERT
ON xml_load
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
  WHEN (
NEW.processed = 'N'
      ) DECLARE 
Value_ID Number;
pValue_ID Number;
pCalculation_ID NUMBER;
Calculation_ID Number;
Calculation_Value_ID Number;
p_Entity_Address_ID Varchar2(50);
New_Value_ID Number;
New_Calculation_ID Number;
New_Calculation_Value_ID Number;
New_Value_Tx varchar2(50);
NEW_UTC_Offset varchar2(50);

BEGIN

Value_ID := value_value_id_seq.NEXTVAL;
New_Value_ID := Value_id;
Calculation_Value_ID :=CALCULATION_VALUE_CALCULATI329.NEXTVAL;
calculation_id := Calculation_Calculation_ID_SEQ.NEXTVAL;



 DBMS_OUTPUT.PUT_LINE(Get_Entity_Address_ID((p_Entity_Address_ID));


DBMS_OUTPUT.PUT_LINE('Value_ID' || Value_ID);

Insert into Value
(VALUE_ID, PRODUCT_ID, DATA_SOURCE_ID, UNIT_CD, VALUE_TX, UTC_OFFSET,     DATA_DATE, HR_UTC, HR, HR_NUM, DATA_CODE, CREATE_DT, CREATE_USER_ID)
VALUES
(Value_ID, null, null, null, :NEW.Value_Tx, :NEW.UTC_Offset, :NEW.Data_Date,     null, :NEW.hr, :NEW.hr_num, :NEW.data_code, SYSDATE, '15');

END;

值中的列如下:value_id,product_id,data_source_id,unit_cd,value_Tx,utc_offset,data_date,hr_utc,hr,hr_num,data_code,create_dt,create_user_id,modify_dt,modify_user_id,effective_Dt,inactive_dt

提前致谢!

1 个答案:

答案 0 :(得分:2)

@AlexPoole指出我之前的答案(我已删除)是错误的;使用与INSERT语句中的列同名的局部变量,虽然令人困惑(和不好的做法),但不会导致触发器失败。

我写过a LiveSQL demo (free OTN account needed)。我不得不弥补表定义,但是使用了你的触发器(除了一件事,见下文)。我的演示在XML_LOAD中插入一行,触发器成功触发并在VALUE中插入一行。

唯一的问题是,我必须将对Get_Entity_Address_ID()的电话评论。

因此,如果bad bind variable是您遇到的实际问题,可能原因是该程序不是触发器。或者您只是使用您在此处发布的代码的不同版本的代码。或者 - 这是最可能的解释 - UTC_OFFSETDATA_DATEHRHR_NUMDATA_CODE 不是表格的列XML_LOAD < / strong>(毕竟,you do have previous form就此而言)。

:new命名空间用于引用属于拥有触发器的表的列。您的触发器代码对我有用,因为我使用您发布的代码中引用的所有列定义了XML_LOAD表。但似乎你没有。