Upserts Postgres

9 views
Skip to first unread message

Fernando Chechi de Vargas

unread,
Apr 4, 2018, 7:49:20 AM4/4/18
to dug...@googlegroups.com
Bom dia pessoal.

Alguém que trabalha com FireDAC e postgres poderia me ajudar?

Eu tenho a seguinte instrução SQL:

WITH upsert AS (
    UPDATE PUBLIC.TABELA
    SET
        VALUE1 = :VALUE1,
        VALUE2 = :VALUE2,
        VALUE3 = :VALUE3,
        VALUE4 = :VALUE4,
        VALUE5 = :VALUE5
    WHERE
        KEY1 = :KEY1
    RETURNING KEY1
)
INSERT INTO PUBLIC.TABELA
(VALUE1, VALUE2, VALUE3, VALUE4, VALUE5)
SELECT
    :VALUE1, :VALUE2, :VALUE3, :VALUE4, :VALUE5
WHERE
    NOT EXISTS (SELECT 1 FROM upsert)
RETURNING KEY1

Quando eu rodo essa instrução no SQL Manager, substituindo os parâmetros por valores literais, a instrução roda sem qualquer erro.

Agora vem o meu problema, quando eu rodo essa mesma instrução no FireDAC, deixando os parâmetros e usando a técnica clássica FireDACDataSet.Params.ParamByName('VALUE1').Value := 'VALOR', o Delphi me dá a seguinte exceção : "Syntax error at or near INSERT". Só que, volto a repetir, se rodar essa instrução no SQL Manager e substituir os parâmetros por valores literais (porque o SQL Manager não sabe reconhecer parâmetros como o IBExperts [por exemplo]) a instrução roda normalmente.

Alguém poderia me ajudar?
Reply all
Reply to author
Forward
0 new messages