對於PostgreSQL 8/9,我的數據庫驅動程序在執行INSERT
或UPDATE
時不會返回受影響的記錄數。獲取PostgreSQL中INSERT或UPDATE影響的記錄數
PostgreSQL提供非標準語法「RETURNING」,這似乎是一個很好的解決方法。但是可能是什麼語法?該示例返回記錄的ID,但我需要一個計數。
INSERT INTO分配器(沒有,DNAME)VALUES(DEFAULT, 'XYZ小部件') 返回做;
對於PostgreSQL 8/9,我的數據庫驅動程序在執行INSERT
或UPDATE
時不會返回受影響的記錄數。獲取PostgreSQL中INSERT或UPDATE影響的記錄數
PostgreSQL提供非標準語法「RETURNING」,這似乎是一個很好的解決方法。但是可能是什麼語法?該示例返回記錄的ID,但我需要一個計數。
INSERT INTO分配器(沒有,DNAME)VALUES(DEFAULT, 'XYZ小部件') 返回做;
我同意w/Milen,你的驅動程序應該爲你做這個。你使用什麼驅動程序和什麼語言?但是,如果您使用的是plpgsql,則可以使用GET DIAGNOSTICS my_var = ROW_COUNT;
http://www.postgresql.org/docs/current/static/plpgsql-statements.html
我知道這個問題是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的...
讓我們更新你的愛情十四行詩:) – 2017-02-07 10:49:35
從你的問題中你不清楚你是如何稱呼陳述的。假設你正在使用類似JDBC的東西,你可能會將它稱爲查詢而不是更新。來自JDBC的executeQuery
:
執行給定的SQL語句,該語句返回單個ResultSet對象。
當你執行返回某些查詢的結果,如SELECT
或INSERT ... RETURNING
聲明這是適當的。如果你正在更新到數據庫,然後想知道有多少元組受到了影響,你需要使用executeUpdate
返回:
:(1)該行數SQL數據操作語言(DML) 語句或(2)爲0 SQL語句不返回
我知道這聽起來不是很有幫助,但你必須找到更好的驅動程序或更新爲您目前的(解決方案OMG小馬已發佈作品只在PL/pgSQL代碼)。 – 2010-10-28 06:42:28
MySQL會自動輸出匹配的行與受更新影響的行,可惜psql驅動程序無法做到這一點。 – EoghanM 2016-08-17 13:41:43
沒有試過這個但是'INSERT INTO發行商(did,dname)VALUES(DEFAULT,'XYZ Widgets')RETURNING 1;'工作? – Jus12 2017-12-04 13:16:15