所以我在过去的几天里一直试图解决这个错误。我有一个存储过程,将一个条目插入我的临时表。一旦登台表插入了一行,就会触发一个触发器,将数据加载到其他几个表中。我的触发器代码如下:
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;
答案 0 :(得分:3)
:NEW.Value_Tx
似乎是NULL
并且您的表值不允许列VALUE_TX
你可以这样做:
alter table
value
modify
(
value_tx varchar2(50)
);
禁止value_tx列中的NOT NULL, 但请确保你真的想这样做
答案 1 :(得分:2)
错误消息非常明确::NEW.Value_Tx
为空,而您的表Value
在列VALUE_TX
上具有NOT NULL约束。因此,这是Oracle正常工作,强制执行表中定义的数据完整性规则。
所以你需要做的是找出为什么:NEW.Value_Tx
为空。它是null,因为它在您插入xml_hours_load_2
的行中为空。这就是你需要解决的问题。
如果事实证明触发中存在空值的合理原因则需要实施一些解决方法。也许您需要传递硬编码值。也许您需要生成一个值(可能带有序列)。业务规则应该为此指定逻辑。