valores una tipo hora error datos convertir conversión caracteres cadena sql oracle plsql oracle11g savepoints

sql - una - ora-01086: el punto de guardado no se estableció o no es válido



tipo de datos time sql server (1)

Ora-01086: el punto de guardado no se estableció o no es válido. KRD_UPD_BORCTAHSILATYAP_SP este SP arroja errores. Cuando pruebo este ciclo a continuación, obtengo el error: ora-01086

Normalmente funciona sin llamar a un sp externo, lo pruebo con un error en línea y retrocedo al punto de guardado. Qué me estoy perdiendo ?

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;


Su comentario sugiere que el procedimiento que está llamando, KRD_UPD_BORCTAHSILATYAP_SP , está KRD_UPD_BORCTAHSILATYAP_SP toda la transacción, es decir, emitiendo un ROLLBACK simple.

De la documentación para ROLLBACK :

El uso de ROLLBACK sin la cláusula TO SAVEPOINT realiza las siguientes operaciones:

  • Finaliza la transacción
  • Deshace todos los cambios en la transacción actual
  • Borra todos los puntos de guardado en la transacción
  • Libera cualquier bloqueo de transacciones

Por lo tanto, el punto de rescate que estableció en su bloque de llamadas se borra, por lo que ya no puede retroceder a eso.