• Viernes 15 de Noviembre de 2024, 13:10

Autor Tema:  Ayuda Con El Dbms_transaction.rollback  (Leído 2724 veces)

istej

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Ayuda Con El Dbms_transaction.rollback
« en: Martes 14 de Junio de 2005, 12:23 »
0
hola a todos aqui os mando un trozo de codigo donde se hace la llamada al
paquete dbms_transaction y al procedimiento rollback alguien me puede contestar porque se hace esto en vez de rollback
<!--sql--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>SQL </td></tr><tr><td id='CODE'><!--sql1-->COGS_MODIFICAR_P (Procedure Body)
         PROCEDURE COGS_MODIFICAR_P IS
         
         L_alerta    NUMBER;
         L_error    CHAR(150);
         
         BEGIN HAB_BLOQUE('cogsdet');
            GO_BLOCK('cogsdet');
            DESHAB_BLOQUE('cogs_enlacesgsm');
            
            
           
            [color=blue;font-weight]SELECT[/color]
               num_secenlacegsm   
            ,   TO_CHAR(fec_baja, 'DD/MM/YYYY')
            ,   TO_CHAR(fec_alta, 'DD/MM/YYYY')      
            ,   TO_CHAR(fec_instalacion, 'DD/MM/YYYY')      
            ,   cod_tipoenlace
            ,   cod_modelo   
            ,   tex_observaciones
            INTO :cogsdet.txt_num_secenlacegsm ,   :cogsdet.txt_fec_baja      
            ,   :cogsdet.txt_fec_alta      
            ,   :cogsdet.txt_fec_instalacion      
            ,   :cogscontrol.c_cod_tipoenlace   
            ,   :cogscontrol.c_cod_modelo
            ,   :cogsdet.txt_observaciones
         
            FROM cogs_enlacesgsm WHERE num_secenlacegsm      =   :cogscontrol.c_num_secenlacegsm AND cod_centralitagsm      =   TO_NUMBER(:GLOBAL.GE_COD_CENTRALITAGSM)
            FOR [color=blue;font-weight]UPDATE[/color] OF    
               num_secenlacegsm   
            ,   fec_baja      
            ,   fec_alta      
            ,   fec_instalacion      
            ,   cod_tipoenlace      
            ,   cod_modelo      
            ,   tex_observaciones
            NOWAIT;
         
         
         EXCEPTION
         
            WHEN NO_DATA_FOUND THEN
               L_alerta   :=   COGS_EMITIR_MENSAJES_F      
                        ( 'I'
                        , '16'
                        , 'n datos '
                        , 'para el enlace '||TO_CHAR(:cogscontrol.c_num_secenlacegsm)
                        , NULL);
•                  DBMS_TRANSACTION.ROLLBACK;
               :cogstit.dxt_nom_centralitagsm:= :GLOBAL.GE_NOM_CENTRALITAGSM;
               RAISE FORM_TRIGGER_FAILURE;
         
            WHEN TOO_MANY_ROWS THEN
               L_alerta   :=   COGS_EMITIR_MENSAJES_F      -- Demasiadas filas ( 'I'
                        , '2'
                        , NULL
                        , NULL
                        , NULL);
•                  DBMS_TRANSACTION.ROLLBACK;
               :cogstit.dxt_nom_centralitagsm:= :GLOBAL.GE_NOM_CENTRALITAGSM;
               RAISE FORM_TRIGGER_FAILURE;
         
            WHEN OTHERS THEN
               L_error    :=    SUBSTR(SQLERRM, 1, 9);      -- El perfil esta siendo modificado por otro usuario
               IF L_error ='ORA-00054' THEN
                  L_alerta   :=   COGS_EMITIR_MENSAJES_F
                           ( 'I'
                           , '13'
                           , 'El enlace '||TO_CHAR(:cogscontrol.c_num_secenlacegsm)
                           , 'o'
                           , NULL);
•                     DBMS_TRANSACTION.ROLLBACK;
                  :cogstit.dxt_nom_centralitagsm:= :GLOBAL.GE_NOM_CENTRALITAGSM;
               HAB_BLOQUE('cogs_enlacesgsm');
               GO_BLOCK('cogs_enlacesgsm');
               DESHAB_BLOQUE('cogsdet');
         
                  RAISE FORM_TRIGGER_FAILURE;
               ELSE
               
                  L_alerta   :=   COGS_EMITIR_MENSAJES_F   -- No hay cambios para salvar
                           ( 'I'
                           , '5'
                           , NULL
                           , NULL
                           , NULL);
•                     DBMS_TRANSACTION.ROLLBACK;
                  :cogstit.dxt_nom_centralitagsm:= :GLOBAL.GE_NOM_CENTRALITAGSM;
                  RAISE FORM_TRIGGER_FAILURE;
               END IF;
            
         END; <!--sql2--></td></tr></table><div class='postcolor'><!--sql3-->

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Ayuda Con El Dbms_transaction.rollback
« Respuesta #1 en: Martes 14 de Junio de 2005, 14:30 »
0
Tu no me crees :(


Bueno para que me creas mira el punto 4.2.4.1  del archivo anexo.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

istej

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Ayuda Con El Dbms_transaction.rollback
« Respuesta #2 en: Miércoles 15 de Junio de 2005, 11:10 »
0
para developer en el forms he encotrado que el rollback te hace un clear form explicito y el dbms_transaction.rollback no lo hace

If you use a PL/SQL ROLLBACKstatement in an anonymous block or a user-defined subprogram, Oracle Forms interprets that statement as a CLEAR_FORM built-in subprogram with no parameters.