post icon

Insert or Update [FIREBIRD]

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;

Comentarios desde Facebook:

  1. avatar
    Javier MEXICO Mozilla Firefox Windows
    24 agosto 2010 at 14:19 #

    Me ha servido mucho, gracias.

    • avatar
      GeekZero PARAGUAY Google Chrome Windows
      24 agosto 2010 at 16:38 #

      Super, visitanos pronto 😉

Responder