OracleからテキストTAB、CSVデータでエクスポートする-2

TSV、CSVで、エクスポートするためのSQL文を簡単に作る方法。

3列くらいの書き出しなら手書きが早い。

しかし、50列もあるような場合は、以下の方法でSQL文を組み立てる。

 

■最終的に作りたいSQLを確認する

 emp_export_tab.sql

set echo off
set heading off
set termout off
set pause off
set pagesize 0
set linesize 1000
set trimspool on
set feedback off
spool ファイル名.txt

SELECT
id || '    ' ||
last_name || '    ' ||
first_name || '    ' ||
address
FROM emp;

spool off
;  

このようにid, last_name, first_name, addressくらいだと手入力が早いけど、何十個も列(フィールド)があったら大変。

 

■テーブルの列名を取得する

書き出すテーブル名が EMP の場合、

SQL> SELECT column_name
  2  FROM all_tab_columns
  3  WHERE UPPER(TABLE_NAME) = 'EMP' ;

 ‘emp’ではなく、’EMP’と入力すること。

 

 

■テキストエディタで加工する

ID
LAST_NAME
FIRST_NAME
ADDRESS

 このように出力された列名をコピーペーストでテキストエディタへ持っていく。

 

置換えコマンド等で、一括変換する。

viの場合、先頭(1)から最終行($)までを対象に、

各業のお尻($)を || ‘タブ’ || に置換える方法は以下のコマンドで実行。

: 1,$ s/$/ || ' ' ||/g 

 

すると、この通り。 

ID || '     ' ||
LAST_NAME || '     ' ||
FIRST_NAME || '     ' ||
ADDRESS  || '     ' ||

 

 

 ■さらに整形して完成

頭とお尻に情報を加えて完成。最後のフィールドのADDRESSには「TAB」が必要ないので消すのを忘れずに。

set echo off
set heading off
set termout off
set pause off
set pagesize 0
set linesize 1000
set trimspool on
set feedback off
spool ファイル名.txt

SELECT
ID || '     ' ||
LAST_NAME || '     ' ||
FIRST_NAME || '     ' ||
ADDRESS
FROM emp;

spool off
;