2010-10-19 61 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