Ora-01086 : save point was not established or invalid. KRD_UPD_BORCTAHSILATYAP_SP this SP throws errors . When I test this loop below, I get the error: ora-01086
Normally it works without calling an external sp, I test it with an inline error and I rolledback to the save point. What am I missing ?
FOR rec IN (...records.....
)
LOOP
SAVEPOINT odemeIslemiBaslangic;
BEGIN
CASE rec.prosedur_ad
WHEN 'KRD' THEN
KRD_UPD_BORCTAHSILATYAP_SP(rec.musterino, rec.urundegeri, rec.taksitno, v_MuhasebeReferans, v_IslemReferans, v_Tarih);
IF v_MuhasebeReferans IS NOT NULL THEN
v_SonucKd := 10;
v_Aciklama := 'Başarılı işlem';
ELSE
v_SonucKd := 9;
v_Aciklama := 'Borç bulunamadı';
END IF;
END CASE;
cll_ins_tahsilatislem_sp(p_odemeno => rec.odemeno,
p_islemtarihi => v_Tarih,
p_musterino => rec.musterino,
p_urundeger => rec.urundegeri,
p_islemref => v_IslemReferans,
p_muhasebesubekd => rec.sube_kd,
p_muhaseberef => v_MuhasebeReferans,
p_aciklama => v_Aciklama,
p_sonuc => v_SonucKd,
p_kayityapan => v_KayitYapan,
p_kayittrxkod => v_KayitTrxKod);
UPDATE cll_gecikmisbankaalacak u
SET u.sonuc_kd = v_SonucKd
WHERE u.odemeno = rec.odemeno
AND u.kayit_drm = 'A';
EXCEPTION
WHEN OTHERS THEN
ROLLBACK TO SAVEPOINT odemeIslemiBaslangic;
v_SonucKd := 1;
v_Aciklama := 'İşlem Hata: ' || substr(SQLERRM, 1, 400);
cll_ins_tahsilatislem_sp(p_odemeno => rec.odemeno,
p_islemtarihi => v_Tarih,
p_musterino => rec.musterino,
p_urundeger => rec.urundegeri,
p_islemref => v_IslemReferans,
p_muhasebesubekd => rec.sube_kd,
p_muhaseberef => v_MuhasebeReferans,
p_aciklama => v_Aciklama,
p_sonuc => v_SonucKd,
p_kayityapan => v_KayitYapan,
p_kayittrxkod => v_KayitTrxKod);
UPDATE cll_gecikmisbankaalacak u
SET u.sonuc_kd = v_SonucKd
WHERE u.odemeno = rec.odemeno
AND u.kayit_drm = 'A';
END;
END LOOP;
Your comment suggests that the procedure you are calling, KRD_UPD_BORCTAHSILATYAP_SP
, is rolling back the whole transaction, i.e. issuing a simple ROLLBACK
.
From the documentation for ROLLBACK
:
Using
ROLLBACK
without theTO SAVEPOINT
clause performs the following operations:
- Ends the transaction
- Undoes all changes in the current transaction
- Erases all savepoints in the transaction
- Releases any transaction locks
The savepoint you established in your calling block is therefore being erased, so you can no longer roll back to that.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With