2014-01-17 17 views
0

我必須提取數據到一個逗號分隔的文件中的.csv 所以我使用遊標和一個for循環,如下所示:如何確保我的源代碼中沒有逗號值?

CURSOR l_body IS 
SELECT b.brn_code       ||','|| 
     t.terminal_no       ||','|| 
     t.pos_username      ||','|| 
     to_char(t.trn_datetime,'dd-Mon-yyyy') ||','|| 
     to_char(t.trn_datetime,'hh24:mi:ss') ||','|| 
     t.trn_type_code); 
FROM tables etc. 

和我的循環看起來像這樣:

FOR x IN l_body LOOP 
    utl_file.put_line(out_file_laybye, x.data_line); 
    END LOOP; 

現在說我的表中的用戶名中的值是'John Doe', 有沒有一種方法可以確保在刪除名稱後刪除逗號,然後我使用||' 將它寫入文件中, ,'||?

我不想在我的提取中得到雙逗號。 在此先感謝。

回答

4

可以使用replace()函數刪除每個值任何逗號:

select replace(', this, is, a, test,', ',', null) from dual; 

REPLACE(',THIS, 
--------------- 
this is a test 

你需要做的是爲每一列,所以

... 
     replace(t.pos_username, ',', null) ||','|| 
... 

您也可以替換不同字符,您也可以使用translate()

select translate(', this, is, a, test,', ',', ' ') from dual; 

TRANSLATE(',THIS,IS, 
-------------------- 
    this is a test 

根據輸出將被使用的位置,您可能更喜歡保留逗號,但以某種方式避開它們。如果您的CSV會在Excel中使用,例如,你可以用雙引號的列值,值中的逗號不與分離困惑:

... 
     '"' || t.pos_username || '"'   ||','|| 
... 

這是非常有用的東西,如地址,其中逗號可能對輸出有幫助。當然,你必須確保字符串不包含雙引號,或者以某種方式逃避,但可能已經是這種情況。

+0

非常感謝你,替換()完全滑了我的腦海 – XcisioN