2010-10-19 38 views
2

Utilisation d'IBM Informix Dynamic Server Version 10.00.FC9Instructions SQL CASE sur Informix - Pouvez-vous définir plus d'un champ dans la section END d'un bloc de requête?

Je souhaite définir plusieurs valeurs de champ avec un bloc CASE. Est-ce possible? Dois-je réévaluer les mêmes conditions pour chaque ensemble de champs?

Je pensais à quelque chose le long de ces lignes:

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

Lorsque la section THEN définirait un « tableau » de champs similaires à la syntaxe des

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

Aussi, peut-elle être fait avec un bloc CASE d'une instruction UPDATE?

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

Répondre

2

Normalement, je demande la version de Informix que vous utilisez, mais il n'a probablement pas beaucoup cette fois-ci. La réponse simple est non'.

Une réponse plus complexe pourrait discuter de l'utilisation d'un constructeur de type ligne, mais ce n'est probablement pas ce que vous voulez sur la sortie. Et, compte tenu de ce qui précède, alors la mise à jour ne va pas fonctionner (et nécessiterait un niveau supplémentaire de parenthèses si elle allait).

+0

J'avais plus que le sentiment que vous auriez la réponse à cette question. J'allais aussi lister la version d'Informix (tu m'as mis dans cette habitude après cette question que je te promets) mais j'oublie toujours comment l'obtenir. – CheeseConQueso

+0

@CheeseConQueso: choisissez votre programme - par exemple, onstat: 'onstat -V' ou' onstat -version'. –

1

Non, une instruction CASE résout en une expression (voir IBM Informix Guide to SQL: Syntax CASE Expressions) et peut être utilisée dans des endroits où une expression est autorisée. Une expression est une valeur unique.

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

Une expression dans un langage de programmation est une combinaison de explicites valeurs, constantes, variables, opérateurs et fonctions qui sont interprétées selon les règles particulières de priorité et de l'association pour un langage de programmation particulier, qui calcule puis produit (renvoie, dans un environnement dynamique ment) une autre valeur.

+0

Une valeur produite "unique" ne peut-elle pas être un tableau? Ma curiosité est alimentée par la syntaxe de, par exemple, Perl, où vous pouvez retourner un tableau produit par une fonction dans une seule référence/variable ('my @array = fonction ($ var1, $ var2);') – CheeseConQueso

+0

SQL doesn 't ont "tableaux", il a les types de base: http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.ddi.doc/ddi57.htm vous pouvez utiliser pour construire des tables et des ensembles de résultats –

+0

pauvre sql ...Eh bien, j'ai juste un lexique mésapparié - quand je vois des choses comme 'where in (1,2,3)' je pense tableau, mais c'est un ensemble non? merci pour les clarifications – CheeseConQueso