2008-09-29 10 views
2

Je génère actuellement des instructions d'insertion SQL de plus d'une table, et les données générées je dois utiliser une instruction CASE, comme ceci:Oracle requête SQL, concaténer fileds à l'article CASE

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 trouver le mot clé FROM.

Une solution rapide consistait à séparer la sortie en champs, puis l'enregistrer en texte, et modifier, mais il doit y avoir une meilleure façon.

Répondre

3

Utiliser END au lieu de FIN CAS

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 
+0

Merci ça marche pour moi! –

1

Dans certaines situations similaires, la fonction "décoder" fonctionne assez bien.

Vous pourriez utiliser l'expression (t.f2> 0) dans un décodage, puis traduire 'T' en '1' et 'F' en '0'.

Je n'ai pas essayé cela.

+0

Decode est sur son chemin, donc je ne recommanderais pas l'utiliser. –