Oracle - Update con cursores

 
Vista:

Update con cursores

Publicado por TUTE (48 intervenciones) el 28/04/2003 13:12:20
Hola a todos. Mi duda es la siguiente. Tengo un update con decodes anidados que hacen referencia dentro a un cursor, q no me da error al compilar, pero lo que es actualizar actualiza mas bien poco.

Os pongo el código a ver si me dais alguna pista de xq no está funcionando la actualización:

DECLARE CURSOR C2 IS
SELECT X_MOTAUS, F_INI, F_FIN, HORAS
FROM AUSENCIAS
WHERE X_TRAB =104
BEGIN
FOR CA IN C2 LOOP
IF(CA.X_MOTAUS = 13) THEN

UPDATE JOR_TRAB SET
HORAS_AUS = DECODE (CA.HORAS,
NULL, HORAS, (DECODE (HORAS_AUS,
NULL,
CA.HORAS, HORAS_AUS+CA.HORAS))),
HORAS_COMP = DECODE (CA.HORAS,
NULL, 0, (DECODE (HORAS_COMP, NULL, HORAS-CA.HORAS, HORAS_COMP-CA.HORAS)))
WHERE X_TRAB = 104;
END IF;
END LOOP;
END;

No se si me habré rayao mucho con el update. A ver si me echais una manilla que mi procedimiento es muy grande y si esto me funcionara lo tendría todo controlado del tirón. Muchisimas gracias a todos por leer esto, q tiene q ser un "(·/")/(/)"·7().
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

RE:Update con cursores

Publicado por Byron (300 intervenciones) el 28/04/2003 16:02:30
El código está bien quiza tengo algunas observaciones:

DECLARE CURSOR C2 IS
SELECT X_MOTAUS, F_INI, F_FIN, HORAS
FROM AUSENCIAS
WHERE X_TRAB =104; -- te faltaba un punto y coma
BEGIN
FOR CA IN C2 LOOP
IF(CA.X_MOTAUS = 13) THEN
UPDATE JOR_TRAB SET HORAS_AUS = DECODE (CA.HORAS, NULL, HORAS, (DECODE (HORAS_AUS,
NULL, CA.HORAS, HORAS_AUS+CA.HORAS))), HORAS_COMP = DECODE (CA.HORAS,
NULL, 0, (DECODE (HORAS_COMP, NULL, HORAS-CA.HORAS, HORAS_COMP-CA.HORAS)))
WHERE X_TRAB = 104; -- ojo con este where
END IF;
END LOOP;
END;

El where del update es el mismo que usas en el cursor, cada vez que actualiza lo hace a todos los registros extraidos por el cursor, hace falta otra condicion más que especifique el registro unico que estas actualizando. Por esta razón el ultimo update que procese se verá afectado en todos los registros extraidos por el cursor.

Quiza también debas tener presente un commit; siempre que hagas sentencias insert, update o delete. Si tu forzas a que el usuario de clic en grabar no hay problema.

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