淘先锋技术网

首页 1 2 3 4 5 6 7

Arch Linux是一款自由、轻量级、灵活的Linux发行版,其特点在于提供纯净的Linux内核以及简洁的软件包管理系统,因而备受程序员和高级用户的喜爱。然而,对于Oracle数据库用户而言,Arch Linux可能会存在一些问题,本文将着重探讨Arch Linux在使用Oracle数据库过程中负数相关的一些问题及解决方案。

在Oracle数据库中,数值为负数的情况时常出现,而在Arch Linux系统下,可能会出现以下两种情况:

$ sqlplus
...
SQL>select -1 from dual;
...
ERROR:
ORA-31011: XML解析失败
ORA-19202: ORA-06512: "'SYS.DBMS_XSLPROCESSOR'", line 11
ORA-06512: "'SYS.DBMS_XMLGEN'", line 690
ORA-06512: line 1
ORA-31011: XML解析失败
ORA-19202: ORA-06512: "'SYS.DBMS_XSLPROCESSOR'", line 11
ORA-06512: "'SYS.DBMS_XMLGEN'", line 690
ORA-06512: line 1
$ sqlplus<< EOS
set numwidth 10;
col c format 9999999999D00;
select -1 as c from dual;
EOS
C
----------- 
-1.00
但是当numwidth设置为小于8时,之前的脚本会产生:
ERROR:
ORA-01820: 字符串时间戳格式不正确

观察以上报错,可以发现这是因为Arch Linux系统默认使用的较新版本的glibc库与Oracle 9i时代的OCI库不兼容所致。解决的方法很简单,只需要在使用sqlplus执行命令的时候设置将NLS_LANG环境变量设置为“AMERICAN_AMERICA.AL32UTF8”即可。

$ export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
$ sqlplus
...
SQL>select -1 from dual;
...
-1

此时再执行出现过负数错误的SQL语句,即可正常输出-1的结果,且numwidth设定不会影响结果。

在使用Arch Linux时,对于这一特性的了解以及对应的解决方案的掌握十分重要。希望此文对您在使用Oracle数据库时能起到帮助作用。