web-dev-qa-db-ja.com

SQL * Plusをbashで実行すると、誤ったエンコーディングが発生します

BashでSQL * Plusを実行する際に問題が発生しました。これが私のコードです

#!/bin/bash

#curl http://192.168.168.165:8080/api_test/xsql/f_exp_order_1016.xsql > script.sql
wget -O script.sql 192.168.168.165:8080/api_test/xsql/f_exp_order_1016.xsql
set NLS_LANG=_.UTF8
sqlplus /nolog << ENDL
connect login/password 
set sqlblanklines on
start script.sql
exit
<<endl

イントラネットから挿入ステートメントをダウンロードし、SQLファイルに入れて、SQL * Plusを介して実行します。これは正常に機能しています。私の問題は、script.sqlファイルを保存するとエンコーディングがうまくいかないことです。すべての特殊文字(íáščなど)が壊れているため、DBに間違った文字が挿入されています。そのファイルのエンコーディングはUTF-8であり、UTF-8もイントラネットのXSQLページで設定されています。だから私は本当にどこが問題になるのかわかりません。

また、私のスクリプトに関するアドバイスも歓迎します。私はLinuxスクリプトの初心者です:-)

2
Petr Mensik

問題はファイルではなく(エンコードは本来UTF-8でした)、OracleNLS_LANG環境変数の設定にありました。したがって、解決策は、SQL * Plusスクリプトを実行する前にこの行を配置することでした

NLS_LANG="CZECH_CZECH REPUBLIC.UTF8" export NLS_LANG

7
Petr Mensik

挿入物をISO8859コードページに変換する必要がある場合があります。 Oracleサーバーで使用されているエンコーディングを確認してください。エンコーディングは「WE8ISO8859P1」などのようになり、使用中のISOコードページを示します。

iconv などを使用して、ファイルをUTF-8エンコーディングからISO8859エンコーディングに変換し、SQL * Plusで実行してみてください。