2010-12-20 48 views
0

我從SQL * Plus中後臺打印分隔文本文件,但每個列都按其定義打印爲完整大小,而不是實際在該行中的數據。僅顯示SQL * Plus中的實際列數據

例如,定義爲10個字符且行值爲「test」的列將作爲「test」而非「test」打印出來。我可以通過選擇列和LENGTH函數的值來確認這一點。它打印「test | 4」。

如果它迫使我變成固定寬度,它會破壞分隔符的用途。是否有一個SET選項可以解決這個問題,或者其他一些方法使它只打印實際的列數據。

我不想將TRIM添加到每一列,因爲如果一個值實際上是存儲空間我希望能夠保留它們。

感謝

+0

也見http://stackoverflow.com/a/14141967/124416 – w00t 2013-01-03 15:32:52

回答

2

我見過很多SQL * Plus腳本,用於創建文本文件是這樣的:

select A || ';' || B || ';' || C || ';' || D 
from T 
where ... 

這是一個強烈的信號,我認爲你不能只是切換到具有可變長度的輸出a SET命令。

而不是';'你當然可以使用任何其他分隔符。這取決於您的查詢是否正確地轉義任何可能與分隔符或換行符混淆的字符。

+1

是的,我很害怕這個。我們可能最終會在所有列上使用TRIM,並希望我們從來沒有被要求研究如何共用尾隨空格。 對我來說,他們會提供內置的分隔輸出,而沒有關閉固定寬度的能力,這似乎很奇怪。你爲什麼要這兩個? – brydgesk 2010-12-20 17:23:02

0

一般來說,我會忘記SQL Plus是將CSV從Oracle中取出的一種方法。

湯姆凱特寫了一個可愛的小臨-C unloader

個人而言,我已經寫了一個工具,它確實相似,但在Perl

相關問題