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);
BEG
IN 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
-- Demasiad
as fil
as (
'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-->