es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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)?

Tags:  , , ,

Answer

  1. Avatar for 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 el MERGE. Aquí hay un ejemplo que utiliza una tabla secundaria:

    MERGE INTO TEST.TABLE T
    USING (
        SELECT 'foo' AS "COLUMN_1", 'bar' AS "COLUMN_2" FROM DUAL
    ) S ON T."COLUMN_1" = S."COLUMN_1"
    WHEN MATCHED THEN UPDATE SET "COLUMN_2" = 'quux'
    WHEN NOT MATCHED THEN INSERT ("COLUMN_1", "COLUMN_2") VALUES (S."COLUMN_1", S."COLUMN_2")
    

    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 objetivo TEST.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.

Comments are closed.