因此,最近几天我一直在尝试解决此错误。我有一个存储过程,将一个条目插入到我的登台表中。一旦登台表插入了一行,就会触发一个触发器,该触发器将数据加载到其他两个表中。我的触发代码如下:
create or replace TRIGGER xml_load_trigger_value AFTER INSERT ON xml_hours_load_2 FOR EACH ROW WHEN ( NEW.processed = 'N' ) DECLARE Value_ID Number; pValue_ID Number; Calculation_ID Number; pCalculation_ID NUMBER; Calculation_Value_ID Number; Hr_Utc Varchar2(4); 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); Survey_Respondent_ID varchar2(50); NEW_submission_id varchar2(50); --PRAGMA AUTONOMOUS_TRANSACTION; 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; 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, '109' , '269', 'NA', :NEW.Value_Tx, :NEW.UTC_Offset, :NEW.Data_Date, :NEW.hr_utc, :NEW.hr, :NEW.hr_num, :NEW.data_code, SYSDATE, '15'); -- Insert into Submission (SURVEY_RESPONDENT_ID, SUBMISSION_DT, SUBMISSION_TYPE_ID, SUBMISSION_NAME_TX, SUBMISSION_SEQ_NB, CREATE_DT, CREATE_USER_ID, MODIFY_DT, MODIFY_USER_ID, EFFECTIVE_DT, INACTIVE_DT) VALUES ('2527451', :NEW.Data_Date, '1', '20190418', '0', sysdate, '1', null, null, null, null); -- Insert into Submission_Value (Submission_ID, Value_ID, Form_Field_Id, Create_DT, Create_user_id, Modify_DT, Modify_user_id, Effective_Dt, Inactive_DT) VALUES ((Select Submission_ID from Submission where Survey_respondent_Id = '2527451' and rownum = 1), Value_Id, '10466', sysdate, '930', null, null, null, null); END;
错误消息非常清楚::NEW.Value_Tx为null,并且您的表Value在column上具有NOT NULL约束VALUE_TX。因此这可以使Oracle正常工作,并执行表上定义的数据完整性规则。
:NEW.Value_Tx
Value
VALUE_TX
因此,您需要做的是找出为什么:NEW.Value_Tx为空的原因。它为null,因为在您要插入的行中为null xml_hours_load_2。这就是您需要解决的问题。
xml_hours_load_2
如果事实证明触发中存在null值是有正当理由的,那么您需要实现一些解决方法。也许您需要传递一个硬编码的值。也许您需要生成一个值(可能带有序列)。业务规则应为此指定逻辑。