2008-09-29 47 views
2

我目前正在从多个表中生成SQL INSERT语句,并在生成的数据,我需要用一个CASE语句,就像这样:的Oracle SQL查询,拼接的Fileds与外壳部分

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 

但在这一点上,如果我想继续我的声明... END CASE||','|| ....我不能再运行查询,因为TOAD抱怨没有找到FROM关键字。

一个快速解决方案是将输出分隔成字段,然后将其保存为文本并进行编辑,但必须有更好的方法。

回答

3

使用结束,而不是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 
+0

谢谢你对我有用! – 2008-09-29 10:15:37

1

对于一些类似的情况,“解码”功能工作得很好。您可以将表达式(t.f2> 0)送入解码,然后将 'T'翻译为'1','F'翻译为'0'。

我还没有试过这个。

+0

解码是其出路,所以我不建议使用它。 – 2008-09-29 13:26:45