WinマシンでSQLPlusを用いてUTF-8でのSPOOLを生成する
今の業務上、夜間バッチのログは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
みたいな感じ。
とりあえずこれでファイル名も連結文字列も正しくなったけど、なんだかなぁ…。
もっとスマートな方法ないんだろうか。