2010-10-27 76 views
31

對於PostgreSQL 8/9,我的數據庫驅動程序在執行INSERTUPDATE時不會返回受影響的記錄數。獲取PostgreSQL中INSERT或UPDATE影響的記錄數

PostgreSQL提供非標準語法「RETURNING」,這似乎是一個很好的解決方法。但是可能是什麼語法?該示例返回記錄的ID,但我需要一個計數。

INSERT INTO分配器(沒有,DNAME)VALUES(DEFAULT, 'XYZ小部件') 返回做;

+1

我知道這聽起來不是很有幫助,但你必須找到更好的驅動程序或更新爲您目前的(解決方案OMG小馬已發佈作品只在PL/pgSQL代碼)。 – 2010-10-28 06:42:28

+0

MySQL會自動輸出匹配的行與受更新影響的行,可惜psql驅動程序無法做到這一點。 – EoghanM 2016-08-17 13:41:43

+0

沒有試過這個但是'INSERT INTO發行商(did,dname)VALUES(DEFAULT,'XYZ Widgets')RETURNING 1;'工作? – Jus12 2017-12-04 13:16:15

回答

46

我知道這個問題是oooolllllld和我的解決方案無疑是過於複雜,但是這是我最喜歡的一種解決方案!

無論如何,我必須做同樣的事情,並得到它的工作是這樣的:

-- Get count from INSERT 
WITH rows AS (
    INSERT INTO distributors 
     (did, dname) 
    VALUES 
     (DEFAULT, 'XYZ Widgets'), 
     (DEFAULT, 'ABC Widgets') 
    RETURNING 1 
) 
SELECT count(*) FROM rows; 

-- Get count from UPDATE 
WITH rows AS (
    UPDATE distributors 
    SET dname = 'JKL Widgets' 
    WHERE did <= 10 
    RETURNING 1 
) 
SELECT count(*) FROM rows; 

這些天,我真的要避開WITH子句寫愛情十四行詩PostgreSQL的...

+8

讓我們更新你的愛情十四行詩:) – 2017-02-07 10:49:35

0

從你的問題中你不清楚你是如何稱呼陳述的。假設你正在使用類似JDBC的東西,你可能會將它稱爲查詢而不是更新。來自JDBC的executeQuery

執行給定的SQL語句,該語句返回單個ResultSet對象。

當你執行返回某些查詢的結果,如SELECTINSERT ... RETURNING聲明這是適當的。如果你正在更新到數據庫,然後想知道有多少元組受到了影響,你需要使用executeUpdate返回:

:(1)該行數SQL數據操作語言(DML) 語句或(2)爲0 SQL語句不返回

相關問題