0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Oracleのテーブルに登録されているデータをCSV形式で出力する。

Last updated at Posted at 2020-12-04

TL;DR

OracleのテーブルからデータをCSV形式で出力したい場合、SQLDeveloperなどに機能で出力するのが一番手っ取り早いが、やむを得ない理由でSQLPlusを利用して出力したい場合に、Oracle12.2以降のSQLPlusであればコマンドを利用して出力できるようになっているのでそのメモ。

コマンド

SET MARKUP CSV [ON] [[DELIMITER '<任意の記号>'] [QUOTE \]]

SQL> select * from test_manage_table where report = 650;

-->結果
"KAISYA","FUNCTION","REPORT","IDENTIFIER","SELECT_ORDER","ITEM_ORDER","MASTER_DIV","MASTER_KAISYA","MASTER_ID","UNION_SPECIFY","SYMBOL1","SYMBOL2","COMPARISON","LANG_ID","CONTENTS1","CONTENTS2","UPDATE_DATE","UPDATE_MAN"
1,214,650,3,1,7,"0",0,0,"0",,,1,,"部門",,"20-12-04","TEST"
1,214,650,5,1,4,"0",0,0,"0",,,1,,"H170",,"19-07-30","TEST"
  • 文字列型の項目のみDelimiterで囲われている。
  • 本当はQUOTEもシングルクォートが指定できればよかったけど、ONOFFしか設定できない。

このままではNULL項目がブランクで出力されており、Insert文に流用する際に面倒なのでNULLも表示するよう設定する。

SQL> set NULL 'NULL'
SQL> select * from test_manage_table where report = 650;

-->結果
"KAISYA","FUNCTION","REPORT","IDENTIFIER","SELECT_ORDER","ITEM_ORDER","MASTER_DIV","MASTER_KAISYA","MASTER_ID","UNION_SPECIFY","SYMBOL1","SYMBOL2","COMPARISON","LANG_ID","CONTENTS1","CONTENTS2","UPDATE_DATE","UPDATE_MAN"
1,214,650,3,1,7,"0",0,0,"0","NULL","NULL",1,NULL,"部門","NULL","20-12-04","TEST"
1,214,650,5,1,4,"0",0,0,"0","NULL","NULL",1,NULL,"H170","NULL","19-07-30","TEST"
  • 数値型項目がうまく「NULL」で出力されているのは良いが、文字列項目かつNULLの場合も「"NULL"」が表示されてしまうのはいただけない。

追記
NULLデータのカラムをブランクとして出力したい場合は、単純にSET NULL """"""とすれば「""」と
表示される。

  • 列名ヘッダーが不要な場合はSET HEAD OFF、「~が選択されました」のフィードバックが不要な場合はSET FEEDRBACK OFFをつければよい。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?