2012-07-16 84 views
1

在Oracle我可以從一個UPDATE語句,像這樣返回信息:的Informix相當於Oracle的UPDATE ... RETURNING INTO說法

UPDATE SOME_TABLE 
SET SOME_COL = SYSDATE 
WHERE 
    ... 
RETURNING SOME_COL INTO :OutParameter 

與受影響的行數,這允許檢查行是否存在相結合,更新它,然後返回關於更新行的一些信息(如新更新的值,或行ID或其他),全部在一個查詢中。

這也可以在SQL Server中使用OUTPUT子句完成。

在Informix中有這樣的事嗎?我檢查了Informix的UPDATE syntax和 它看起來不像它有任何等效物...任何替代方法?

回答

1

受影響的行的數目可從SQLCA記錄,這在普通的SQL或SPL可用經由DBINFO('sqlca.sqlerrd2')

例如爲:

UPDATE table SET foo = 'bar' WHERE baz = 'quux'; 
INSERT INTO log_table (date_stamp, msg, row_count) 
    VALUES (CURRENT, "Updated foo to bar", DBINFO('sqlca.sqlerrd2')); 

fine manual

Informix中沒有與RETURNING子句等效的內容。這個概念對我來說似乎很奇怪 - 當多行更新時,如何使用動態內容,如SET foo = baz * bar,其中foo,baz和bar都是列,並且沒有單個值由所有受影響的元組共享?

+0

您可以使用'RETURNING'子句將值傳入集合中,以便一次捕獲多行。 – 2012-07-17 12:43:54

+1

在Adam的評論中進行了擴展,RETURNING子句的非常有用,以便您的UPDATE,INSERT或DELETE語句返回有關修改的行的信息。在你的例子中,你可以添加RETURNING foo INTO:F,讓它在乘以baz * bar之後輸出foo的最終值。這將適用於由順序器,隨機函數,觸發器,函數等改變的值。 – 2012-07-17 13:25:57

+0

無論如何,我已經接受了「Informix中沒有等價於RETURNING子句」的答案。 – 2012-07-17 13:31:33

相關問題