PDA

Ver la Versión Completa : If dentro de un store procedure con DB2


María Belén
22-02-2010, 17:46:06
Hola que tal necesito que me ayuden, es que tengo un store procedure que tiene un if para 3 diferentes casos, uno para cuando el nummateria=1, cuando el nummateria=2 y cuando nummateria=3, ayuda contesten por favor es urgente, trate con case pero tampoco me deja

Este es el código que uso
ALTER PROCEDURE [espol].[SP_APRORESOL_ING]
@idPeriodo as int,
@idPrograma as int,
@nummaterias as int,@minnota as decimal(5,2)
AS


If (@nummaterias = 1)
Begin--actualizando los estados de las materias
Begin
UPDATE espol.TBL_CURSO_PERSONA
SET cp.estado ='AC'
FROM espol.TBL_CURSO_PERSONA CP
INNER JOIN ESPOL.TBL_INSCRIPCION I
ON CP.idpersonaprograma = I.idpersonaprograma
and cp.idperiodo = i.idperiodo
INNER JOIN espol.V_CUADRO_FINAL V
ON (i.IDINSCRIPCION = V.IDINSCRIPCION AND CP.IDMATERIA = V.IDMATERIAM1 AND I.IDPROGRAMA = V.IDPROGRAMA AND I.IDPERIODO = V.IDPERIODO)
WHERE V.IDPERIODO = @idPeriodo AND
V.IDPROGRAMA = @idPrograma AND
V.NUMMAT = 1
AND (V.M1NOTA >=@minnota AND V.M1NOTA < 6)

End --Carreras de dos materia se aprueba con un promedio min pero solo cuando ya han aprobado una materia

If (@nummaterias = 2)
Begin
Begin
UPDATE espol.TBL_CURSO_PERSONA
SET cp.estado ='AC'
FROM espol.TBL_CURSO_PERSONA CP
INNER JOIN ESPOL.TBL_INSCRIPCION I
ON CP.idpersonaprograma = I.idpersonaprograma
and cp.idperiodo = I.idperiodo
INNER JOIN espol.V_CUADRO_FINAL V
ON (I.IDINSCRIPCION = V.IDINSCRIPCION
AND CP.IDMATERIA = V.IDMATERIAM2
AND I.IDPROGRAMA = V.IDPROGRAMA
AND I.IDPERIODO = V.IDPERIODO)
WHERE V.IDPERIODO = @idPeriodo
AND V.IDPROGRAMA=@idPrograma
AND V.NUMMAT = 2 AND
V.M1NOTA >= 6
AND (V.M2NOTA >=@minnota AND V.M2NOTA < 6)

--AND COALESCE(APRB_X_RESOLUCION, 'N') = 'N'
--Carreras de tres materia se aprueba con un promedio min pero solo cuando ya han aprobado dos materias
If (@nummaterias = 3)
Begin
Begin
UPDATE espol.TBL_CURSO_PERSONA
SET cp.estado='AC'
FROM
espol.TBL_CURSO_PERSONA CP
INNER JOIN ESPOL.TBL_INSCRIPCION I
ON CP.idpersonaprograma = I.idpersonaprograma
and cp.idperiodo = i.idperiodo
INNER JOIN espol.V_CUADRO_FINAL V
ON (I.IDINSCRIPCION = V.IDINSCRIPCION
AND CP.IDMATERIA = V.IDMATERIAM1
AND I.IDPROGRAMA = V.IDPROGRAMA
AND I.IDPERIODO = V.IDPERIODO)
WHERE V.IDPERIODO=@idPeriodo
AND V.IDPROGRAMA=@idPrograma
AND V.NUMMAT = 3
AND V.M2NOTA >= 6
AND V.M3NOTA >= 6
AND (V.M1NOTA >=@minnota AND V.M1NOTA < 6) --AND COALESCE(APRB_X_RESOLUCION, 'N') = 'N'
UPDATE espol.TBL_CURSO_PERSONA
SET cp.estado ='AC' FROM espol.TBL_CURSO_PERSONA CP
INNER JOIN ESPOL.TBL_INSCRIPCION I
ON CP.idpersonaprograma = I.idpersonaprograma
and cp.idperiodo = i.idperiodo
INNER JOIN espol.V_CUADRO_FINAL V
ON (I.IDINSCRIPCION = V.IDINSCRIPCION AND CP.IDMATERIA = V.IDMATERIAM2 AND I.IDPROGRAMA = V.IDPROGRAMA AND I.IDPERIODO = V.IDPERIODO)
WHERE
V.IDPERIODO=@idPeriodo AND
V.IDPROGRAMA=@idPrograma AND
V.NUMMAT = 3
AND V.M1NOTA >= 6 AND V.M3NOTA >= 6
AND (V.M2NOTA >=@minnota AND V.M2NOTA < 6)


End End

ASAPLTDA
26-05-2010, 15:24:36
Hola podrias describir el problema que ocurre y otra pregunta porque tienes dos begin despues del if?
Saludes