Oracle - Comportamiento extraño de UPDATE

   
Vista:

Comportamiento extraño de UPDATE

Publicado por jjespada (2 intervenciones) el 20/09/2011 13:56:58
Buenas a todos.

Tengo un código como el que sigue, el cual intenta actualizar un registro, y si no lo encuentra, lo inserta dentro de la excepción NO_DATA_FOUND. Lo estoy probando contra una tabla vacía, y sin embargo, ejecuta el UPDATE y pasa a incrementar el contador, cuando debería haber saltado la excepción.
Si ejecuto una select de comprobación antes del update, con el mismo filtro, la excepción salta correctamente, lo que me tiene despistado.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DECLARE
vcontador INTEGER:=0;
BEGIN
 
UPDATE tabla SET
            campo=valorcampo
WHERE (tabla.id=valorid);
vcontador:=vcontador+1;
 
EXCEPTION
 
        WHEN NO_DATA_FOUND THEN
 
            INSERT INTO TABLA(CAMPO) VALUES(valorcampo);
END;


Muchas gracias.
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

Comportamiento extraño de UPDATE

Publicado por jjespada (2 intervenciones) el 20/09/2011 14:07:57
Si añado la cláusula EXISTS, se comporta también de forma incorrecta, pasa al contador.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DECLARE
vcontador INTEGER:=0;
BEGIN
 
UPDATE tabla SET
campo=valorcampo
WHERE EXISTS(SELECT * FROM tabla WHERE tabla.id=valorid);
vcontador:=vcontador+1;
 
EXCEPTION
 
WHEN NO_DATA_FOUND THEN
 
INSERT INTO TABLA(CAMPO) VALUES(valorcampo);
END;
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

Comportamiento extraño de UPDATE

Publicado por Javier M (17 intervenciones) el 02/10/2011 07:45:29
Hola
Espero te pueda ayudar.
Oracle ya hace esto con un stamtement DML que es el merge.
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

Comportamiento extraño de UPDATE

Publicado por APRENDIZ (1 intervención) el 29/05/2014 23:09:29
Al parecer falla en el UPDATE, va a ejecutar el parrafo de la excepcion y luego vuelve a la linea siguiente que es incrementar el contador
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

Comportamiento extraño de UPDATE

Publicado por Miguel (8 intervenciones) el 30/05/2014 14:55:28
Hola,
cuando a diferencia del SELECT el UPDATE no provoca excepcion cuando no encuentra coincidencias, por lo tanto lo que debes hacer es

SI NO EXISTE EL REGISTRO (aca debes ocupar el not exists)
GENERO EL INSERT
ELSE
GENERO UPDATE
FIN


obviamente lo que escribi arriba es conceptual, pero el codigo oracle es simple,

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