Когда я выполняю следующий запрос в PG Admin III, он работает нормально:
WITH new_values (updated_at,talker_id,sentence_id,v0,v1,v2,v3,v4,v5) AS (
VALUES (current_timestamp,'2','3','4','5','6','7','8','9')
),
UPSERT AS (
UPDATE utel u
SET
updated_at=nv.updated_at,
v0=nv.v0,v1=nv.v1,v2=nv.v2,v3=nv.v3,v4=nv.v4,v5=nv.v5
FROM
new_values nv
WHERE
u.talker_id=nv.talker_id AND u.sentence_id=nv.sentence_id RETURNING u.*
)
INSERT into utel (updated_at,talker_id,sentence_id,v0,v1,v2,v3,v4,v5)
SELECT updated_at,talker_id,sentence_id,v0,v1,v2,v3,v4,v5
FROM new_values WHERE NOT EXISTS(
SELECT 1 FROM upsert up
WHERE
up.talker_id=new_values.talker_id
AND up.sentence_id=new_values.sentence_id
)
но когда я пытаюсь выполнить его через TFDQuery, PostgreSQL жалуется:
синтаксическая ошибка в или около "INSERT" в символе 355
Я включил запись PostgreSQL в журнал ошибок Windows и увидел следующее:
DECLARE "10STM" CURSOR WITH HOLD FOR
WITH new_values (updated_at,talker_id,sentence_id,v0,v1,v2,v3,v4,v5) AS (
VALUES (current_timestamp,'2','3','4','5','6','7','8','9')
),
UPSERT AS (
UPDATE utel u
SET
updated_at=nv.updated_at,
v0=nv.v0,v1=nv.v1,v2=nv.v2,v3=nv.v3,v4=nv.v4,v5=nv.v5
FROM
new_values nv
WHERE
u.talker_id=nv.talker_id AND u.sentence_id=nv.sentence_id RETURNING u.*
)
INSERT into utel (updated_at,talker_id,sentence_id,v0,v1,v2,v3,v4,v5)
SELECT updated_at,talker_id,sentence_id,v0,v1,v2,v3,v4,v5
FROM new_values WHERE NOT EXISTS(
SELECT 1 FROM upsert up
WHERE
up.talker_id=new_values.talker_id
AND up.sentence_id=new_values.sentence_id
)
Когда я выполняю то же самое с DECLARE "10STM" CURSOR WITH HOLD FOR
в PG Admin III, я получаю точно такую же ошибку.
Почему FireDAC ставит перед запросом PG курсор и как этого избежать?
ckStatic
(в параметрах выборки)? Используете ли вы транзакции? Какой компонент FireDAC? Какая версия Делфи? Рассматривали ли вы выполнение этого в блоке? Я вижу, что происходит в Токио, просто хочу посмотреть, что привело к такому решению. - person Victoria   schedule 15.09.2017ckAutomatic
. Я изменил его наckDefault
, и теперь он работает. Пожалуйста, получите свои баллы. - person Paul   schedule 05.10.2017