Domanda

Attualmente sto generando istruzioni di inserimento SQL da più di una tabella e nei dati generati ho bisogno di usare un'istruzione CASE, come questa:

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

Ma a questo punto, se voglio continuare la mia affermazione con ... END CASE || ',' || .... Non riesco più a eseguire la query, poiché TOAD si lamenta di non aver trovato la parola chiave FROM.

Una soluzione rapida era quella di separare l'output in campi, quindi salvarlo in testo e modificarlo, ma deve esserci un modo migliore.

È stato utile?

Soluzione

Usa END anziché 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

Altri suggerimenti

Per alcune situazioni simili, la "decodifica" la funzione funziona abbastanza bene.

Potresti essere in grado di alimentare l'espressione (t.f2 > 0) in un decodifica, quindi tradurre 'T' in '1' e 'F' in '0'.

Non ho provato questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top