我有一个在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
我从我们的Intranet下载插入语句,把它放到SQL文件中,并通过SQL * Plus运行。 这工作正常。 我的问题是,当我保存文件script.sql我的编码出错了。 所有特殊字符(如íášč)都被破坏,导致我的数据库中插入错误的字符。 该文件的编码是UTF-8,UTF-8也在我们的Intranet的XSQL页面上设置。 所以我真的不知道哪里可能是个问题。
也欢迎任何有关我的脚本的build议,我是Linux脚本中的新手:-)
好的,问题不在文件中(编码是UTF-8,因为它应该是这样),但在Oracle NLS_LANG环境variables的设置中。 所以解决scheme是在执行SQL * Plus脚本之前放置这一行
NLS_LANG="CZECH_CZECH REPUBLIC.UTF8" export NLS_LANG
您可能需要将插入转换为ISO8859代码页。 检查您的Oracle服务器上正在使用的编码。 编码应该看起来像'WE8ISO8859P1'或类似的东西,这将告诉正在使用的ISO代码页。
您可以使用iconv或类似的东西将文件从UTF-8编码转换为ISO8859,然后尝试通过SQL * Plus运行它。