Oracle ALTER SESSION SET NLS_TERRITORY=“联合王国”不起作用
我是sqlplus的新手 我试过了 'ALTER SESSION SET NLS_TERRITORY=英国 将货币兑换成英镑。它工作过一次,但在我把它改成 'ALTER SESSION SET NLS_TERRITORY=日本 把它改回Oracle ALTER SESSION SET NLS_TERRITORY=“联合王国”不起作用,oracle,sqlplus,Oracle,Sqlplus,我是sqlplus的新手 我试过了 'ALTER SESSION SET NLS_TERRITORY=英国 将货币兑换成英镑。它工作过一次,但在我把它改成 'ALTER SESSION SET NLS_TERRITORY=日本 把它改回 'ALTER SESSION SET NLS_TERRITORY = "United Kingdom" SELECT TO_CHAR(1111, 'L9999') FROM DUAL 它输出1111。 我怎样才能解决这个问题?查看v$n
'ALTER SESSION SET NLS_TERRITORY = "United Kingdom"
SELECT TO_CHAR(1111, 'L9999') FROM DUAL
它输出1111。
我怎样才能解决这个问题?查看v$nls_参数,只有当我将其设置为UK时才会发生这种情况。[TL;DR]
一种解决方案可能是升级到Oracle 19。
如果使用windows命令提示符,另一种可能是运行:
set NLS_LANG=ENGLISH_UNITED KINGDOM.we8pc850
在运行SQL/Plus之前,请设置用于显示字符的代码页。
这适用于运行Oracle 19c的Oracle的LiveSQL
ALTER SESSION SET NLS_TERRITORY=英国;
从DUAL中选择“FML9999”以显示字符1111;
哪些产出:
TO_CHAR(1111,'FML9999')
-----------------------
£1111
以及:
选择*
从nls_数据库_参数
按参数排序
产出:
PARAMETER VALUE
----------------------- ----------------------------
NLS_CALENDAR GREGORIAN
NLS_CHARACTERSET AL32UTF8
NLS_COMP BINARY
NLS_CURRENCY $
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_DUAL_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_LANGUAGE AMERICAN
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_NCHAR_CONV_EXCP FALSE
NLS_NUMERIC_CHARACTERS .,
NLS_RDBMS_VERSION 19.0.0.0.0
NLS_SORT BINARY
NLS_TERRITORY AMERICA
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
PARAMETER VALUE
----------------------- ----------------------------
NLS_CALENDAR GREGORIAN
NLS_COMP BINARY
NLS_CURRENCY £
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_DUAL_CURRENCY €
NLS_ISO_CURRENCY UNITED KINGDOM
NLS_LANGUAGE AMERICAN
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NUMERIC_CHARACTERS .,
NLS_SORT BINARY
NLS_TERRITORY UNITED KINGDOM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH24.MI.SSXFF
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH24.MI.SSXFF TZR
NLS_TIME_FORMAT HH24.MI.SSXFF
NLS_TIME_TZ_FORMAT HH24.MI.SSXFF TZR
及
选择*
从nls_会话_参数
按参数排序
产出:
PARAMETER VALUE
----------------------- ----------------------------
NLS_CALENDAR GREGORIAN
NLS_CHARACTERSET AL32UTF8
NLS_COMP BINARY
NLS_CURRENCY $
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_DUAL_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_LANGUAGE AMERICAN
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_NCHAR_CONV_EXCP FALSE
NLS_NUMERIC_CHARACTERS .,
NLS_RDBMS_VERSION 19.0.0.0.0
NLS_SORT BINARY
NLS_TERRITORY AMERICA
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
PARAMETER VALUE
----------------------- ----------------------------
NLS_CALENDAR GREGORIAN
NLS_COMP BINARY
NLS_CURRENCY £
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_DUAL_CURRENCY €
NLS_ISO_CURRENCY UNITED KINGDOM
NLS_LANGUAGE AMERICAN
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NUMERIC_CHARACTERS .,
NLS_SORT BINARY
NLS_TERRITORY UNITED KINGDOM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH24.MI.SSXFF
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH24.MI.SSXFF TZR
NLS_TIME_FORMAT HH24.MI.SSXFF
NLS_TIME_TZ_FORMAT HH24.MI.SSXFF TZR
LiveSQL
但是,在运行Oracle 18c的dbfiddle中运行相同的脚本会输出:
产出:
而且他们都没有将NLS_货币设置为%。事实上,这似乎很难不可能?获取要在Oracle DBFIDLE中输出的字符
小提琴
但是,在本地安装的Oracle 11gR2上,如果运行:
ALTER SESSION SET NLS_TERRITORY=英国;
更改会话集NLS_货币=';
从DUAL中选择“FML9999”以显示字符1111;
那么输出是:
看看这个:
字符集是相同的,在设置上没有明显的区别,将NLS_语言改为美语也没有区别,但可能有一个设置我错过了;
可能是前端的区别,从LiveSQL到dbfiddle和SQL/PLUS;
它可能在操作系统用于显示字符的代码页中-您可以看到Windows的更多详细信息;
或者,这可能是Oracle版本的一个问题,Oracle 19中固定了对英镑的处理,尽管由于它在Oracle 11g上对我有效,我不确定是否会出现这种情况。
PARAMETER | VALUE
:---------------------- | :--------------------------
NLS_CALENDAR | GREGORIAN
NLS_COMP | BINARY
NLS_CURRENCY | #
NLS_DATE_FORMAT | DD-MON-RR
NLS_DATE_LANGUAGE | ENGLISH
NLS_DUAL_CURRENCY | ?
NLS_ISO_CURRENCY | UNITED KINGDOM
NLS_LANGUAGE | ENGLISH
NLS_LENGTH_SEMANTICS | BYTE
NLS_NCHAR_CONV_EXCP | FALSE
NLS_NUMERIC_CHARACTERS | .,
NLS_SORT | BINARY
NLS_TERRITORY | UNITED KINGDOM
NLS_TIMESTAMP_FORMAT | DD-MON-RR HH24.MI.SSXFF
NLS_TIMESTAMP_TZ_FORMAT | DD-MON-RR HH24.MI.SSXFF TZR
NLS_TIME_FORMAT | HH24.MI.SSXFF
NLS_TIME_TZ_FORMAT | HH24.MI.SSXFF TZR
CHR(163)
ALTER SESSION SET NLS_CURRENCY = ''
Error: ORA-12705: Cannot access NLS data files or invalid environment specified
Pound sign
ALTER SESSION SET NLS_CURRENCY = '??'
??1111
UNISTR('\00A3')
ALTER SESSION SET NLS_CURRENCY = '#'
#1111
TO_CHAR(1111,'F
---------------
£1111