簡體   English   中英

FireDAC在查詢之前使用DECLARE CURSOR

[英]FireDAC precedes query with DECLARE CURSOR

當我在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抱怨:

字符355處“ INSERT”處或附近的語法錯誤

我打開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
)

當我執行相同的操作時,使用PG Admin III中的DECLARE "10STM" CURSOR WITH HOLD FOR ,我會得到完全相同的錯誤。

為什么FireDAC在PG查詢之前使用光標,以及如何避免這種情況?

維多利亞不想得到她的觀點,所以這里是答案:

提取選項中的游標種類設置為ckAutomatic 我將其更改為ckDefault ,現在可以使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM