Por Geymer Morales Cruz

Compartiendo Información...

Actualizar o Insertar un Registro en una sentencia ORACLE Y SQL Server

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: