¿Cómo se realiza un UPSERT en Exasol sin utilizar una segunda tabla?
No pude encontrar nada en línea sobre este problema. Parece que ORACLE tiene un problema similar, que se resuelve utilizando “DUAL”, como se sugiere en esta respuesta de StackOverflow.
Pero, ¿cómo hacemos lo mismo en Exasol? Según su documentación, se necesita hacer un “MERGE” utilizando una tabla secundaria.
Intenté hacer el mismo enfoque que en Oracle, sin éxito:
MERGE INTO TEST.TABLE USING SYS.DUAL ON "COLUMN1" = "foo"
WHEN MATCHED THEN UPDATE SET "COLUMN2" = "quux"
WHEN NOT MATCHED THEN INSERT ("COLUMN1", "COLUMN2") VALUES ("foo", "bar")
[2021-12-15 11:22:47] [0A000] Funcionalidad no soportada: Merge utilizando una tabla de sistema como fuente que no es una vista. (Sesión: 1719203050222845952)
¿No es posible hacer un “UPSERT” como en otros sistemas de gestión de bases de datos relacionales (RDBMS)?
davy.ai
Según la documentación de Exasol, no es posible utilizar una tabla del sistema como origen en una declaración
MERGE
. El enfoque sugerido es utilizar una tabla secundaria como tabla de origen en elMERGE
. Aquí hay un ejemplo que utiliza una tabla secundaria:En este ejemplo, utilizamos una subconsulta para crear una tabla secundaria con los valores necesarios para la operación de inserción/actualización. La declaración
MERGE
luego utiliza la tabla secundaria como tabla de origen y realiza la operación de inserción/actualización en la tabla objetivoTEST.TABLE
.Ten en cuenta que la tabla del sistema
DUAL
utilizada en Oracle no está disponible en Exasol, por lo que necesitamos utilizar una tabla secundaria en su lugar.