2012-10-24 26 views
1

我無法通過PostgreSQL文檔,Web上或甚至是StackOverflow獲取關於這個簡單問題的信息......我不能在此插入和重要的東西。如何獲取事務內的SELECT語句的結果?

我在PostgreSQL中製作一個簡單的SELECT/UPDATE交易:

START TRANSACTION; 
SELECT "column" FROM "table" WHERE "criterion" = 'value' AND "activated" = true; 
UPDATE "table" SET "activated" = false WHERE "criterion" = 'value'; 
COMMIT 

基本上,我需要得到一個列的值時,其activated狀態是true,然後停用。 PostgreSQL的告訴我,有已經被取消了1行的結果

同樣的情況,如果我這樣做(基本上是相同的交易withotu的UPDATE發言):

START TRANSACTION; 
SELECT "column" FROM "table" WHERE "criterion" = 'value' AND "activated" = true; 
COMMIT 

什麼都不用我瞭解交易? SELECT輸出不能從事務塊輸出嗎?

+0

你會通常是'選擇 「列」,從the_primary_ky ...''然後... UPDATE SET ... WHERE the_primary_key = value_returned_from_select'。 –

+0

這取決於你打算做什麼。這裏不是這種情況 –

回答

1

這將返回所有「列」的值從更新的行:

UPDATE "table" SET "activated" = false WHERE "criterion" = 'value' AND "activated" = true 
returning "column"; 

沒有關係事務。

returning將返回值如果select發出:


update foo 
set archived = true 
where not archived 
returning *; 
ticket | row | archived 
--------+-----+---------- 
     2 | 5 | t 
+0

如果交易沒有影響,你如何解釋第二個?包含在事務中的一個簡單的'SELECT'隱藏了它的結果... 我沒有使用PL/pgSQL,RETURNING在這裏不起作用。從未在 –

+0

@ user573152之前看過該命令它將返回,就好像它是'select'一樣。查看編輯過的帖子。 _你怎麼解釋第二個_第二個是什麼? –

+0

我在我的帖子中提供了2筆交易,他們都沒有工作。第二個是一個簡單的'SELECT'在一個事務中。這種方式毫無用處,但這應該仍然不行嗎? 哦,我終於得到它使用'RETURNING'語句工作。謝謝! –