what type hsql descargar data create jdbc insert hsqldb

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