SoloCodigo
Bases de Datos => Oracle => Mensaje iniciado por: istej en Martes 14 de Junio de 2005, 12:23
-
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-->
-
Tu no me crees :(
Bueno para que me creas mira el punto 4.2.4.1 del archivo anexo.
-
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.