Requête SQL Oracle, concaténer des champs avec la section CASE
Question
Je génère actuellement des instructions SQL d'insertion à partir de plusieurs tables. Dans les données générées, je dois utiliser une instruction CASE, comme ceci:
select 'INSERT INTO TABLE1 (f1, f2, f3, f4 ...) values ('
||t.f1||','
||CASE
WHEN t.f2 > 0 THEN '1'
ELSE '0'
END CASE
from table2 t , table3 t3
Mais à ce stade, si je veux continuer ma déclaration avec ... END CASE || ',' || ....
Je ne peux plus exécuter la requête car TOAD se plaint de ne pas avoir trouvé le mot clé FROM.
Une solution rapide consistait à séparer la sortie en champs, puis à l'enregistrer au format texte et à la modifier, mais il devait y avoir un meilleur moyen.
La solution
Utilisez END au lieu de END CASE
select 'INSERT INTO TABLE1 (f1, f2, f3, f4 ...) values ('
||t.f1||','
||CASE
WHEN t.f2 > 0 THEN '1'
ELSE '0'
END||','||t.f2
from table2 t , table3 t3
Autres conseils
Dans certaines situations similaires, l'option "décoder". la fonction fonctionne assez bien.
Vous pourrez peut-être insérer l'expression (t.f2 > 0) dans un décodage, puis traduire "T" dans "1" et "F" dans "0".
Je n'ai pas essayé cela.