jdbc - type - Actualización hsqldb en inserción
java in memory database (2)
¿Alguien sabe de una solución para hacer columnas de actualización de HSQLDB llamando a INSERTAR? Me gustaría que mi código pueda insertar, y si ya hay datos, para actualizar esos datos. Sé que MySQL, creo, tiene ''ACTUALIZACIÓN CLAVE DUPLICADA''. Parece que no puedo encontrar ninguna documentación reciente sobre esto.
Una buena muestra es a veces mejor la documentación formal en la declaración MERGE :)
Muestra 1
Para una tabla ( MY_TABLE
) con tho columnas ( COL_A
y COL_B
), donde la primera columna es una clave principal:
MERGE INTO MY_TABLE AS t USING (VALUES(?,?)) AS vals(a,b)
ON t.COL_A=vals.a
WHEN MATCHED THEN UPDATE SET t.COL_B=vals.b
WHEN NOT MATCHED THEN INSERT VALUES vals.a, vals.b
Muestra 2
COL_C
otra columna ( COL_C
) a nuestra tabla:
MERGE INTO MY_TABLE AS t USING (VALUES(?,?,?)) AS vals(a,b,c)
ON t.COL_A=vals.a
WHEN MATCHED THEN UPDATE SET t.COL_B=vals.b, t.COL_C=vals.c
WHEN NOT MATCHED THEN INSERT VALUES vals.a, vals.b, vals.c
Muestra 3
Ahora cambiemos la clave principal para que conste de las dos primeras columnas ( COL_A
y COL_B
):
MERGE INTO MY_TABLE AS t USING (VALUES(?,?,?)) AS vals(a,b,c)
ON t.COL_A=vals.a AND t.COL_B=vals.b
WHEN MATCHED THEN UPDATE SET t.COL_C=vals.c
WHEN NOT MATCHED THEN INSERT VALUES vals.a, vals.b, vals.c
¡Disfrutar!
HSQLDB proporciona la instrucción MERGE para este propósito.
http://hsqldb.org/doc/2.0/guide/dataaccess-chapt.html#dac_merge_statement
Alternativamente, puede escribir un breve procedimiento almacenado para insertar, luego detectar cualquier excepción de violación de restricción y realizar una actualización.
http://hsqldb.org/doc/2.0/guide/sqlroutines-chapt.html#src_psm_handlers
Actualización: a partir de la versión 2.3.4 HSQLDB también admite la sintaxis de MySQL para ON DUPLICATE KEY