2008-09-29 24 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