Recién hemos visto como hacer ésta tarea en MySQL y fue bastante sencillo, en el caso de Firebird es aún mucho más sencilla y es la implementación que más me ha gustado
Hay que tener en cuenta que Firebird soporta ésta sintaxis recién a partir de la versión 2.1.
Básicamente consiste en insertar 1 registro si no existe o actualizarlo en caso contrario sin necesidad de hacer manualmente la validación. Algunos factores a tener en cuenta son que no se puede la sentencia OLD en los triggers, además no es necesario que contenga todas la columnas de la tabla.
Además se tiene la posibilidad de hacer el “merge” basado en cualquiera de las columnas, no está limitado a las PK o Unique Index (estos pequeños detalles hizo que me guste su implementación además que es la más sencilla que he visto hasta ahora).
Ejemplo:
Esto compararía contra la PK de la tabla para hacer el merge.
1 2 | UPDATE OR INSERT INTO table (a, b, c) VALUES (1, 2, 3); |
Si lo que queremos en hacer una comparación contra otra columna o conjunto de columnas podemos implementarlo del siguiente modo:
1 2 3 4 5 6 7 | UPDATE OR INSERT INTO table (a, b, c) VALUES (1, 2, 3) MATCHING (b); UPDATE OR INSERT INTO table (a, b, c) VALUES (1, 2, 3) MATCHING (b, c); |
También podemos retornar sus valores, ejemplo la PK que fue modificada si hicimos el MATCHING basado en otra columna
1 2 3 4 | UPDATE OR INSERT INTO table (a, b, c) VALUES (1, 2, 3) MATCHING (b); RETURNING id INTO :Pk; |
Articulos Relacionados:









en
en
en
en
Me ha servido mucho, gracias.
Super, visitanos pronto