Oracle - IF anidados en procedure

   
Vista:

IF anidados en procedure

Publicado por noel (2 intervenciones) el 11/03/2015 23:20:38
Hola q tal muy buenas a todos, soy nuevo por aquí en la web, bueno pues paso a mi problema,

estoy haciendo un procedimiento para validar unas fechas y estoy usando if anidados, el problema es q no se si lo q estoy haciendo este bien, y por ejemplo ya que se cumplieron todas las condiciones, donde puedo meter el else de q si todo eso no se cumple, haga un insert en una tabla


esto es lo q tengo

create or replace procedure prorroga_temporal is

v_id_organizacion prorroga.id_organizacion%TYPE;
v_id_hr prorroga.id_hr%TYPE;
v_hr_period prorroga.hr_period%TYPE;
v_sco_id_incidencia prorroga.id_incidencia%TYPE;
v_fecha_inicio prorroga.fecha_inicio%TYPE;
v_fecha_inicio_pr prorroga.fecha_inicio_pr%TYPE;
v_fecha_fin_pr prorroga.fecha_fin_pr%TYPE;

vaux_id_hr incapacidad.id_hr%TYPE;
vaux_fecha_inicio incapacidad.fecha_inicio%TYPE;


CURSOR tablaprorroga IS
select id_organizacion, id_hr, hr_period, id_incidencia, fecha_inicio, fecha_inicio_pr, fecha_fin_pr
from prorroga where id_organizacion = 'GAME'
and id_hr in (
select id_hr from incapacidad
where id_organizacion = 'GAME'
and hr_period = '1'
)
order by id_hr, fecha_inicio;

BEGIN
OPEN tablaprorroga;
LOOP
FETCH tablaprorroga INTO v_id_organizacion, v_id_hr, v_hr_period, v_id_incidencia, v_fecha_inicio, v_fecha_inicio_pr, v_fecha_fin_pr;
EXIT WHEN tablaprorroga%NOTFOUND;

If (v_id_hr = vaux_id_hr) Then

If (vaux_fecha_inicio = v_fecha_inicio) Then
If (vaux_fecha_inicio = v_fecha_inicio_pr) Then

If (v_fecha_inicio = v_fecha_inicio_pr) Then
If (v_fecha_inicio <> v_fecha_inicio_pr) Then
If (v_fecha_fin_pr = v_fecha_fin_pr -1) Then
COMMIT;
Else
INSERT INTO INCAPACIDADES_TEMPORALES (id_organizacion,id_hr,hr_period, id_incidencia, fecha_inicio, fecha_inicio_pr, fecha_fin_pr)
VALUES (v_id_organizacion, v_id_hr, v_hr_period, v_id_incidencia, v_fecha_inicio, v_fecha_inicio_pr, v_fecha_fin_pr);

End If;
End If;
EndIf;
End If;
End If;
End If;
COMMIT;

END LOOP;

CLOSE tablaprorroga;
COMMIT;
END;

espero me de a explicar para q me puedan orientar, ya soy nuevo en oracle
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

IF anidados en procedure

Publicado por luis (232 intervenciones) el 12/03/2015 17:52:30
Hola Noel,

Para que se ejecute el insert debe pasar todos los niveles de los "IF" si está bien, solo tu lo sabes, supongo que realizaras pruebas si lo que estas haciendo está bien.

Otro punto, por cada transacción solo se debe colocar 1 sentencia commit, pues veo que estas realizando muchas sentencias commit.

Saludos

Luis.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

IF anidados en procedure

Publicado por noel (2 intervenciones) el 13/03/2015 00:01:48
Muchas gracias por contestar Luis, asi es el insert debe de ejecutarse si pasa todas las sentencias If y ya despues de hacerle varias pruebas y algunas correcciones, por fin funciona bien, saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar