Hola buenas como están, hoy le compartiré un artículo interesante y
útil para todos aquellos que desarrollan día a día, A continuación
veremos cómo hacer una inserción o actualización en una misma sentencia(Actualizar o Insertar un Registro en ORACLE Y SQL Server en la misma sentencia),
resulta que a partir de la versión 9i de Oracle Database y a partir de
SQL Server 2008 se incorpora una novedosa sentencia llamada MERGE(ahora
es parte del estándar ANSI SQL). comúnmente cuando queríamos
insertar/actualizar una tabla no vacía teníamos que hacer un INSERT o
UPDATE, Con MERGE podemos tener esta lógica en una única sentencia SQL y
así simplificamos el código.
A continuación les muestro la sintaxis de MERGE:
MERGE TABLA USING (SELECT @ID AS ID) AS SRC ON SRC.ID = TABLA.ID WHEN MATCHED THEN UPDATE SET Campo1 = @Valor WHEN NOT MATCHED THEN INSERT (Campo1,ID) VALUES (@Valor,@ID)
En la línea 1 indicamos nuestra tabla en la cual se van a insertar los datos al igual que el select en la línea 2.
En
línea 3 y 4 es donde le indicamos que si coinciden los campos
anteriores realice entonces una actualización de ese registro, caso
contrario en la línea 5 y 6 en donde indicamos que inserte el dato.
Existen
varias soluciones para realizar este proceso de inserción o
actualización en una sola sentencia ya sea en SQL Server o en Oracle, la
siguiente personalmente la utilizaba antes para mis sistemas, pero por
eficiencia utilizo mejor MERGE que anteriormente se los explique, de
igual manera les comparto la solución.
La estructura de la consulta es la siguiente:
BEGIN INSERT INTO MITABLA (CAMPO1,CAMPO2;CAMPO3,CAMPO4) VALUES (1,'2','MIDESCRIPCION','MIDESCRIPCION2'); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN UPDATE MITABLA SET CAMPO2=22,CAMPO3='OTRADESCRIPCION',CAMPO4='OTRADESCRIPCION' WHERE CAMPO1='PARAMETRO_ID' ; END;
En
una explicación breve, en la line 2 y 3 le indicamos que realice la
inserción común y corriente, lo interesante acá sucede en la línea 4 y 5
que es donde le indicamos que si los campos llaves que definimos en la
tabla se duplica entonces esto produce una excepción de duplicidad de
llaves por lo que se ejecutara la siguiente instrucción que se refiere
6,7,8 en donde hacemos el UPDATE normal obviamente con el WHERE
indicándole también nuestros campos llaves.
Espero les funcione y que les sea de mucha utilidad la información, será hasta la próxima saludos.
0 comentarios:
Publicar un comentario