Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle ALTER SESSION SET NLS_TERRITORY=“联合王国”不起作用_Oracle_Sqlplus - Fatal编程技术网

Oracle 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

我是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$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