2015-09-09 62 views
0

我有一個使用EXECUTE多次調用的PREPARE語句。 要保存數據庫連接成本,我們作出這樣一個大的查詢:PostgreSQL結合了多個EXECUTE語句

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

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

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

回答

0

您可以使用反式行動和臨時表。並執行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見注)沒有你的完整場景我不能告訴任何其他細節你更多,但你應該明白。

0

我認爲你需要一個破解。

  • 創建result表更新之前存儲你的結果
  • 創建triggermyTable
  • 內部的觸發加INSERT INTO result VALUES(col3)

所以每次你myTable行更新還值會可插入result