Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ora-01086 : save point was not established or invalid

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;
like image 430
Bilgin Kılıç Avatar asked Jan 15 '14 13:01

Bilgin Kılıç


1 Answers

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 the TO 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.

like image 61
Alex Poole Avatar answered Oct 19 '22 11:10

Alex Poole