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?

メモ:Oracle_SQLPlusでTSV出力(CSV出力)

Last updated at Posted at 2025-03-26

・データの取得にSQLPlusの「SET MARKUP CSV」というSET句の機能を利用するため
それがサポートされているバージョン(おそらくOracleClient 12.2以上)が前提

・ポイント
「SET MARKUP CSV」は区切り文字設定(DELIMI~)できるが、TAB文字は普通には設定できないっぽいので下記のように設定している。(これを設定しなければデフォルトカンマ区切りでCSV出力)

title.rb

COLUMN TAB NEW_VALUE varTAB
SELECT CHR(9) AS TAB FROM DUAL;
SET MARK CSV ON DELIMI '&varTAB' QUOTE ON

・その他SET句などは下記のように設定したりしている。(取得するデータの内容によって設定は見直し)

title.rb
--データベースから一度にフェッチする配列の大きさ
SET ARRAYSIZE 512
--スクリプトのSQLPlusコマンドを表示しない
SET ECHO OFF
--問い合わせの結果レコード件数を表示しない
SET FEED OFF
--出力をユーザの表示デバイスに表示しない
SET FLU OFF
--実行するスクリプトのコマンドによって生成される出力を表示しない
SET TERM OFF
--SQL実行時間を表示しない
SET TIMI OFF
--置換変数に設定する前後の状態を表示しない
SET VERIFY OFF
--レコードセパレータ設定これをせていしないと結果に余計な改行が入ってしまう
SET RECSEP OFF
--プロンプト画面に現在時刻を表示させる
SET TIME ON
--NUMBER型の表示幅を指定桁数が多いと指数表示になってしまうのでそれの回避用
SET NUMWIDTH 15

--TAB区切り
COLUMN TAB NEW_VALUE varTAB
SELECT CHR(9) AS TAB FROM DUAL;
SET MARK CSV ON DELIMI '&varTAB' QUOTE ON

--日付型の表示形式設定
ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
ALTER SESSION SET NLS_TIMESTAMP_FORMAT='YYYY-MM-DD HH24:MI:SS';

・その他のメモ
実例:下記のようなSQLをbatなどから実行して、実行した日のフォルダ、日時のファイルを出力するようにしている。

title.rb

--フォルダ名の日付部分取得
COLUMN DIR DATE NEW_VALUE varDIR_DATE
SELECT TO_CHAR(SYSDATE,'YYYYMMDD') AS DIR_DATE FROM DUAL;

--ファイル名の日付時刻部分取得
COLUMN LOG_DATE NEW_VALUE varLOG_DATE
SELECT TO_CHAR(SYSDATE, 'YYYYMMDD_HH24MISS') AS LOG_DATE FROM DUAL;

--HostコマンドでOSのコマンドが実行できるようになる
--WindowsコマンドのMdコマンドでフォルダを作成
host Md &varDIR_DATE.

--ログ出力
spool ./&varDIR_DATE./OutputTest_&varLOG_DATE..tsv append

--列ヘッダを表示する
SET HEAD ON

--取得したいSQL実施
SELECT
    *
FROM
    DUAL
;

spool off

・呼び出すbatは下記のような感じ

title.rb

--実行するDBの文字コードに合わせて設定下記はUTF-8
chcp 65001
SET NLS_LANG=Japanese_Japan.AL32UTF8

salplus ユーザ名@接続先/パスワード @test.sql

exit

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?