読者です 読者をやめる 読者になる 読者になる

ど忘れSEの備忘録

日々集めた何かしらを残すための何か。 共有とか疑問解決とかできたらいいな。 iPhoneとかiOSとかその他スクリプトとか色々。

WinマシンでSQLPlusを用いてUTF-8でのSPOOLを生成する

FTP oracle

今の業務上、夜間バッチのログはUTF-8で出力される。
で、そのログにSQLPLUSで取得したクエリの結果をくっつけて出力したい。

処理の流れはこんな感じ。
1.SFTPにて夜間バッチのログをサーバから取ってくる
2.SQLPlusでの実行結果を別ファイルに出力する
3.1と2のファイルを順次読み込み、連結した文字列を生成する


1のファイルはUTF-8なので、単純にbatファイル内で文字コード変換すりゃいいだろーって安直な考えで

rem chcp 65001
rem SET NLS_LANG=Japanese_Japan.AL32UTF8
sqlplus scott/tiger@sid @aaa.sql

みたいに書いたっけ、がっつり文字化けしやがるのね。
パターンで試してみると…

cmd NLS_LANG スクリプト spoolファイル名 spool内容 連結文字列
sjis sjis sjis 正常(sjis 正常(sjis NG(文字化け)
sjis utf8 utf8 NG(utf8) 正常(utf8) 正常
utf8 utf8 utf8 NG(utf8) 正常(utf8) 正常

そうか、utf8でspool吐こうとするとutf8でファイル名生成されちゃうのね…。
どうすっかなーと悩んだ結果、かなり無理矢理なやり方で解決。
クエリのスクリプト自体はutf8だけど、spoolファイル名の指定をsjis→utf8で文字化けさせたファイル名を指定。

SET trimspool ON
spool logs\0.�����̉��ʎ��s����.log

select count(1) ファイル出力件数 from TABLE

みたいな感じ。
とりあえずこれでファイル名も連結文字列も正しくなったけど、なんだかなぁ…。
もっとスマートな方法ないんだろうか。