SQLcl
めちゃちゃ文字化けするよなぁ
SQLcl: リリース24.4.3.0 Production ビルド: 24.4.3.070.2106
でなら、powershellでこのコマンドをやるだけでOK
$ $env:JAVA_TOOL_OPTIONS="-Dfile.encoding=Shift_JIS"
SQLファイルはSJISで作成し、SQLファイル内でエンコーディング UTF8するのが一番マシになる
table:case
ターミナル SQLファイル SQLエンコード 結果ファイル 合否とコメント
powershell SJIS UTF8 UTF8 △(結果ファイルが文字化けする、UTF8で開けばやや見える)
powershell UTF8 UTF8 UTF8 ✖(マルチバイト文字のインサートが出来ない)
コマンドプロンプト SJIS UTF8 UTF8 △(結果ファイルが文字化けする、UTF8で開けばやや見える)
コマンドプロンプト UTF8 UTF8 UTF8 ✖(マルチバイト文字のインサートが出来ない)
複数のSQLファイルをかますときは
①UTF8→②UTF8で実行すればきちんと実行が出来る(結果ファイルももちろんUTF8)
UTF8モードで起動
$ cmd.exe /k chcp 65001
処理結果を確認する
code:log.sql
WHENEVER SQLERROR EXIT SQL.SQLCODE ROLLBACK
set sqlformat csv
SET ENCODING UTF-8
spool ins.log
-- n行されましたを消す
set def on
set feed on
--結果を標準出力に表示しない
set term on
文字化けを"あまり"せずSPOOLする
code:spool.sql
SET ENCODING UTF-8
-- n行されましたを消す
set def off
set feed off
--結果を標準出力に表示しない
set term off
set sqlformat csv
起動時の文字化け対策
公式ページ
$ SET JAVA_TOOL_OPTIONS=-Duser.language=ja
$ sql hr/oracle
これをしたら結構いい感じで起動できる!
c:\SQLDev\sqlcl\20.2\sqlcl\bin>SET JAVA_TOOL_OPTIONS=-Duser.language=es
c:\SQLDev\sqlcl\20.2\sqlcl\bin>sql hr/oracle
Picked up JAVA_TOOL_OPTIONS: -Duser.language=es
SQLcl: Versi≤n 20.2 Production en mar. ago. 25 15:37:58 2020
Copyright (c) 1982, 2020, Oracle. Todos los derechos reservados.
Last Successful login time: Mar Ago 25 2020 15:38:01 -04:00
Conectado a:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Se ha encontrado login.sql en el CWD. El acceso a la DB estß restringido para login.sql.
Ajuste SQLPATH para incluir la ruta y activar la funcionalidad completa.
SQL>
code:sqlcl.sql
set sqlformat csv
SET ENCODING UTF-8
set NLS_LANG=Japanese_Japan.JA16SJISTILDE
sqlplusみたいなものかと思ってたけど、結構独自機能あってよさげ。
csv出力とかええのう?
CSV出力のためには以下を行えばOK
$ set sqlformat csv
SPOOLした結果が文字化けるときはファイルをUTF8にして以下encode付けるとよさげ。
$ SET ENCODING UTF-8
SHOW ENCODINGS
使えるエンコード確認用
$ SHOW ENCODING
クライアントに設定されたエンコーディングを表示します。>
公式リファレンス
わかりやすい説明資料
公式のサンプル集・・githubだと・・
SQLclで以下エラーが発生したときに対処したこと→:sqlplusを使う
※sqldeveloperでもエクスポート出来ないのはもしかしたら内部的にこのエラーが起きているせいなのかな。。
Exception in thread "main" java.lang.StackOverflowError
at java.util.HashMap.hash(HashMap.java:339)
at java.util.HashMap.get(HashMap.java:557)
at oracle.dbtools.parser.Earley.tree(Earley.java:730)
at oracle.dbtools.parser.Earley.followComplete(Earley.java:806)
at oracle.dbtools.parser.Earley.tree(Earley.java:735)
at oracle.dbtools.parser.Earley.followComplete(Earley.java:806)
at oracle.dbtools.parser.Earley.tree(Earley.java:735)
at oracle.dbtools.parser.Earley.followComplete(Earley.java:811)
select
DB(SJIS)→CSV(UTF8)
DB(SJIS)→CSV(SJIS)
LOAD
CSV(UTF8)→DB(SJIS)
CSV(SJIS)→DB(SJIS)