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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top