2010-10-19 37 views
2

使用IBM Informix Dynamic Server版本10.00.FC9Informix上的SQL CASE語句 - 您可以在大小寫塊的END部分設置多個字段嗎?

我正在尋找設置多個字段值與一個CASE塊。這可能嗎?我是否必須重新評估每個字段集的相同條件?

我正沿着這些路線思考的東西:

SELECT CASE WHEN p.id = 9238 THEN ('string',3) END (varchar_field, int_field); 

THEN部分將定義一個字段的「數組」類似的

INSERT INTO table (field1,field2) values (value1,value2)

同樣的語法,可以把它用UPDATE聲明的CASE塊來完成?

UPDATE TABLE SET (field1,field2) = CASE WHEN p.id=9238 THEN (value1,value2) END;

回答

2

通常情況下,我會問爲Informix的版本,您正在使用,但它可能沒有多大意義的這段時間。簡單回答是不'。

更復雜的答案可能會討論使用行類型構造函數,但這可能不是你想要的輸出。而且,鑑於上述情況,那麼UPDATE不會起作用(並且如果需要,將需要額外的括號水平)。

+0

我不止一種感覺,你會有這個答案。我也將列出Informix的版本(在我承諾這個問題後,你讓我養成了這種習慣),但我總是忘記如何獲得它。 – CheeseConQueso 2010-10-19 18:50:54

+0

@CheeseConQueso:選擇你的程序 - 比如onstat:'onstat -V'或'onstat -version'。 – 2010-10-19 21:00:13

1

不,CASE語句解析爲表達式(請參閱IBM Informix Guide to SQL: Syntax CASE Expressions),並且可以在允許使用表達式的地方使用。表達式是單個值。

http://en.wikipedia.org/wiki/Expression_%28programming%29

一種表達在編程 語言是顯式的 值,常量,變量, 運算符和函數,根據優先級的 特定規則是 解釋的組合和 關聯的特定 編程語言,它計算 然後產生(返回,在 有狀態環境)另一個價值。

+0

無法將「單個」生成的值作爲數組嗎?我的好奇心來自於例如Perl的語法,在這裏你可以將一個函數產生的數組返回到一個引用/變量('my @array = function($ var1,$ var2);') – CheeseConQueso 2010-10-19 19:07:03

+0

SQL doesn沒有「數組」,它具有基本類型:http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.ddi.doc/ddi57.htm其中你可以用來建立表和結果集 – 2010-10-19 19:28:41

+0

糟糕的SQL ...以及我只是有一個不匹配的詞彙 - 當我看到像'在哪裏(1,2,3)'我想數組的東西,但它是一個集合嗎?謝謝澄清 – CheeseConQueso 2010-10-19 20:26:08