11 Voto

Firebird: INSERT con ON DUPLICATE KEY UPDATE

Pregunta de PC Control | 27/10/2023 a las 21:04

Me gustaría insertar algunos datos en una base de datos de Firebird o, si el ID correspondiente ya existe, actualizar el registro con ese ID. Me gustaría hacer esto dentro de una consulta para no recibir ningún mensaje de error y no tener que verificar primero si ya hay un ID en la tabla.

Para ello, MySQL cuenta con el comando "INSERT ... ON DUPLICATE KEY UPDATE", el cual se construye de la siguiente manera:

INSERT INTO tab (id, val) VALUES (10, 1)
  ON DUPLICATE KEY UPDATE val = val + 1;

Esto inserta un registro con id = 10 y val = 1 en la tabla "tab", si el id = 10 aún no existe. Sin embargo, si este ID existe, el valor de val de esta fila se incrementa en 1.

Eso es exactamente lo que me gustaría hacer ahora también con Firebird. Desafortunadamente, Firebird no parece entender esta sintaxis y siempre me da sólo un mensaje de error. ¿Qué puedo hacer? ¿Esta opción no está disponible en Firebird?

ResponderPositivoNegativo
2Mejor Respuesta2 Votos

Incluso en Firebird puede realizar una INSERT "ON DUPLICATE KEY UPDATE". Sin embargo, en Firebird la sintaxis es un poco diferente. En lugar de la sintaxis de MySQL, debe escribir "UPDATE OR INSERT".

Su consulta desde arriba se vería así en Firebird:

UPDATE OR INSERT INTO tab (id, val) 
  VALUES (10, 1);

La consulta "UPDATE OR INSERT" de Firebird utiliza automáticamente la(s) columna(s) existente(s) con PRIMARY KEY. Si no tiene una columna PRIMARY KEY o si desea usar otras columnas para la coincidencia, puede usar la palabra clave MATCHING al final de su consulta:

UPDATE OR INSERT INTO tab (id, val) 
  VALUES (10, 1) 
  MATCHING(id);

Después de MATCHING en el paréntesis, usted define qué columnas se utilizarán para la coincidencia. En este ejemplo, tomé nuevamente la columna "id" para que corresponda a su ejemplo.

Puede encontrar más información sobre este tema en las preguntas frecuentes de Firebird.
28/10/2023 a las 10:23

ResponderPositivo Negativo
Responder

Temas Relacionados

Firebird: SELECT con LIMIT

Pregunta | 1 Respuesta

Aviso Importante

Por favor tenga en cuenta: Las contribuciones publicadas en askingbox.com son contribuciones de los usuarios y no deben reemplazar el asesoramiento profesional. No son verificados por independientes y no reflejan necesariamente la opinión de askingbox.com. Aprende más.

Participar

Haga su propia pregunta o escriba su propio artículo en askingbox.com. He aquí cómo.