Create Or Replace Trigger Trigger_TOS_D_PATIENT_PAST
After Insert Or Update On TOS_D_PATIENT_PAST For Each RowBegin
If Inserting Then
DECLARE RNT INT := 0; BEGIN
SELECT COUNT(1) INTO rnt from tos_d_patient_info_summary t where t.patient_id = :new.patient_id;
if(rnt>0) then
update tos_d_patient_info_summary t
set
t.knj_kiorrk = TOS_SP_PATIENTINFOMNGDATA.FILL_KNJKIORRK(:new.patient_id) where t.patient_id = :new.patient_id;
else
Insert Into tos_d_patient_info_summary(patient_id,knj_kiorrk) Values(:new.patient_id,TOS_SP_PATIENTINFOMNGDATA.FILL_KNJKIORRK(:new.patient_id));
end if;
END; Elsif Updating Then
update tos_d_patient_info_summary T
set
T.KNJ_KIORRK=TOS_SP_PATIENTINFOMNGDATA.FILL_KNJKIORRK(:old.PATIENT_ID),
t.knj_allergy =TOS_SP_PATIENTINFOMNGDATA.FILL_KNJALLERGY(:old.PATIENT_ID),
t.knj_kansen =TOS_SP_PATIENTINFOMNGDATA.FILL_KNJKANSEN(:old.PATIENT_ID)
where t.patient_id=:old.PATIENT_ID;
End If;End;
当我向表tos_d_patient_past插入值的时候, 提示错误,,请问怎么错了啊
如果没有触发器,是可以插入的,
报:ORA-04091 0RA-06512 ORA-06512 ORA-04088错误
After Insert Or Update On TOS_D_PATIENT_PAST For Each RowBegin
If Inserting Then
DECLARE RNT INT := 0; BEGIN
SELECT COUNT(1) INTO rnt from tos_d_patient_info_summary t where t.patient_id = :new.patient_id;
if(rnt>0) then
update tos_d_patient_info_summary t
set
t.knj_kiorrk = TOS_SP_PATIENTINFOMNGDATA.FILL_KNJKIORRK(:new.patient_id) where t.patient_id = :new.patient_id;
else
Insert Into tos_d_patient_info_summary(patient_id,knj_kiorrk) Values(:new.patient_id,TOS_SP_PATIENTINFOMNGDATA.FILL_KNJKIORRK(:new.patient_id));
end if;
END; Elsif Updating Then
update tos_d_patient_info_summary T
set
T.KNJ_KIORRK=TOS_SP_PATIENTINFOMNGDATA.FILL_KNJKIORRK(:old.PATIENT_ID),
t.knj_allergy =TOS_SP_PATIENTINFOMNGDATA.FILL_KNJALLERGY(:old.PATIENT_ID),
t.knj_kansen =TOS_SP_PATIENTINFOMNGDATA.FILL_KNJKANSEN(:old.PATIENT_ID)
where t.patient_id=:old.PATIENT_ID;
End If;End;
当我向表tos_d_patient_past插入值的时候, 提示错误,,请问怎么错了啊
如果没有触发器,是可以插入的,
报:ORA-04091 0RA-06512 ORA-06512 ORA-04088错误
Create Or Replace Trigger Trigger_TOS_D_PATIENT_PAST
After Insert Or Update On TOS_D_PATIENT_PAST For Each Row
把
For Each Row
去掉吧...
after Update On TOS_D_PATIENT_PAST For Each Row
begin
DECLARE RNT INT := 0;
BEGIN
SELECT COUNT(1) INTO rnt from tos_d_patient_info_summary t where t.patient_id = :old.patient_id;
if(rnt>0) then
update tos_d_patient_info_summary t
set
t.knj_kiorrk = TOS_SP_PATIENTINFOMNGDATA.FILL_KNJKIORRK(:old.patient_id) where t.patient_id = :old.patient_id;
else
Insert Into tos_d_patient_info_summary(patient_id,knj_kiorrk) Values(:new.patient_id,TOS_SP_PATIENTINFOMNGDATA.FILL_KNJKIORRK(:old.patient_id));
end if;
END;
end;
下面这段话单独抽出来 报同样的错误
before Insert On TOS_D_PATIENT_PAST For Each Row
Begin
DECLARE RNT INT := 0;
BEGIN
SELECT COUNT(1) INTO rnt from tos_d_patient_info_summary t where t.patient_id = :new.patient_id;
if(rnt>0) then
update tos_d_patient_info_summary t
set
t.knj_kiorrk = TOS_SP_PATIENTINFOMNGDATA.FILL_KNJKIORRK(:new.patient_id) where t.patient_id = :new.patient_id;
else
Insert Into tos_d_patient_info_summary(patient_id,knj_kiorrk) Values(:new.patient_id,TOS_SP_PATIENTINFOMNGDATA.FILL_KNJKIORRK(:new.patient_id));
end if;
END;
End;上面这样就不报错 把insert触发器改成update就报错,,,我像改成update怎么改啊
For Each Row 去掉报错
这是个啥,函数? 又操作本身依附的表了吧。