簡體   English   中英

PostgreSQL結合了多個EXECUTE語句

[英]PostgreSQL combine multiple EXECUTE statements

我有一個PREPARE語句,使用EXECUTE會多次調用它。 為了節省數據庫連接成本,我們進行了一個大查詢,例如:

PREPARE updreturn as update myTable set col1 = 1 where col2= $1 returning col3;
EXECUTE updreturn(1);
EXECUTE updreturn(2);
....
EXECUTE updreturn(10);

並發送到數據庫。 但是,我只得到最后一個EXECUTE語句的結果。

有沒有辦法將這些結果存儲在臨時表中並獲取所有結果?

我認為您需要為此提供一些技巧。

  • 創建result表以存儲結果
  • 在更新myTable之前創建trigger
  • 在該觸發器內添加INSERT INTO result VALUES(col3)

因此,每次myTable行更新時,也會在result插入一個值

您可以使用事務和臨時表。 並執行3個查詢:

查詢1:啟動事務( 我不知道您使用什么來連接數據庫 )。

查詢2:

-- Create a Temporary Table to store the returned values
CREATE TEMPORARY TABLE temp_return (
    col3    text
) ON COMMIT DROP;

-- Prepare the Statement
PREPARE updreturn AS 
    WITH u AS (
        UPDATE myTable SET col1 = 1 WHERE col2= $1 RETURNING col3
    )
    INSERT INTO temp_return (col3) SELECT col3 FROM u;

EXECUTE updreturn(1);
EXECUTE updreturn(2);
.....
EXECUTE updreturn(10);

-- Deallocate the Statement
DEALLOCATE updreturn;

-- Actually return the results
SELECT * FROM temp_return;

查詢3:提交事務( 請參閱查詢1的注釋

沒有關於您的完整方案的任何其他詳細信息,我無法告訴您更多信息,但是您應該明白這一點。

暫無
暫無

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

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