博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NLS参数优先级解析
阅读量:2497 次
发布时间:2019-05-11

本文共 2681 字,大约阅读时间需要 8 分钟。

本文解析了NLS参数在C/S模式下的作用顺序。

可以在数据库、实例和会话级别上设置NLS参数。

如果在多个级别上均设置了NLS参数:

   1.NLS数据库参数优先级低于NLS实例参数

2.NLS数据库和实例参数优先级低于NLS会话参数

比如,在init.ora中设置了参数NLS_NUMERIC_CHARACTERS(point B),并且在客户端环境变量(point A)中也有设置,那么会话级的参数值会覆盖实例级的参数值。

译自Metalink Note 241047.1 The Priority of NLS Parameters Explained

A)会话级参数设置

通过以下查询

select * from NLS_SESSION_PARAMETERS;

获取会话级上的NLS参数设置.

1)通过“alter session ”命令修改NLS参数。比如:

alter session set NLS_DATE_FORMAT = 'DD/MM/YYYY';

注意:通过after logon trigger也可以实现。

select OWNER, TRIGGER_NAME, TRIGGER_BODY

from DBA_TRIGGERS

where trim(TRIGGERING_EVENT) = 'LOGON';

参考Note 251044.1

2)如果没有显式通过“alter session”设置,那么会通过客户端的NLS_LANG设置相应的NLS参数。

NLS_LANG包括:NLS_LANG=_.

比如:

NLS_LANG=DUTCH_BELGIUM.WE8MSWIN1252

如何查询会话使用的NLS_LANG,参考Note 158577.1

3)如果NLS_LANG只是指定了,那么默认的为AMERICAN

注意NLS_LANG=_BELGIUM.WE8PC850而非NLS_LANG=BELGIUM.WE8PC850,”_”是必需的。

比如如果设置了NLS_LANG=_BELGIUM.WE8PC850

那么参数设置为:

PARAMETER                      VALUE

   ------------------------------ --------------

   NLS_LANGUAGE                   AMERICAN

   NLS_TERRITORY                  BELGIUM

   NLS_CURRENCY                  

   NLS_ISO_CURRENCY               BELGIUM

   ....

4)如果NLS_LANG只是指定了,那么会依据而变化。比如如果设置了NLS_LANG= ITALIAN_.WE8PC850

那么参数设置为:

PARAMETER                      VALUE

   ------------------------------ --------------

   NLS_LANGUAGE                   ITALIAN

   NLS_TERRITORY                  ITALY

   NLS_CURRENCY                  

   NLS_ISO_CURRENCY               ITALY

   .....

5)如果没有设置_,那么默认的是AMERICAN_AMERICA。

.NLS_COMP不能作为环境变量设置,必需通过alter session配置

比如,设置NLS_LANG=.WE8PC850

那么参数设置为:

PARAMETER                      VALUE

   ------------------------------ ----------

   NLS_LANGUAGE                   AMERICAN

   NLS_TERRITORY                  AMERICA

   NLS_CURRENCY                   $

   NLS_ISO_CURRENCY               AMERICA

   ....

6)设置了NLS_LANG仍然可以单独设置其他NLS参数,比如NLS_ISO_CURRENCY=FRANCE

NLS_LANG=AMERICAN_AMERICA.WE8PC850

那么参数设置为:

PARAMETER                      VALUE

   ------------------------------ -----------

   NLS_LANGUAGE                   AMERICAN

   NLS_TERRITORY                  AMERICA

   NLS_CURRENCY                   $

   NLS_ISO_CURRENCY               FRANCE

   ...

注意NLS_ISO_CURRENCY= FRANCE中的空格,虽然不会报错,但会忽略该参数。

默认值:

.如果NLS_DATE_LANGUAGE或者NLS_SORT没有设置,从NLS_LANGUAGE继承

.如果f NLS_CURRENCY, NLS_DUAL_CURRENCY, NLS_ISO_CURRENCY, NLS_DATE_FORMAT,NLS_TIMESTAMP_FORMAT, NLS_TIMESTAMP_TZ_FORMAT, NLS_NUMERIC_CHARACTERS没有设置,从NLS_TERRITORY中继承。

7)如果NLS_LANG没有设置,默认为_.US7ASCII,_的值为NLS_INSTANCE_PARAMETERS中的设置。在客户端单独设置的比如NLS_SORT等参数会被忽略。

.参数NLS_SESSION_PARAMETERS优先于NLS_INSTANCE_PARAMETERS和NLS_DATABASE_PARAMETERS

.不能从服务器端disabled该行为,所以客户端的参数设置通常会优于服务器端设置。

.NLS_LANG参数不能用alter session设置,而NLS_LANGUAGE和NLS_TERRITORY可以,但这两个参数不能作为单独的客户端NLS参数设置

.客户端NLS_LANG设置的字符集部分不会在任何系统表或视图中体现。

参考Note 158577.1中的4.2部分

.9i中NLS_LENGTH_SEMANTICS参数不能作为环境变量设置,10g可以

.NLS_NCHAR_CONV_EXCP不能作为环境变量设置,但可以使用alter session设置

.会话参数中的NLS_LANGUAGE同样作为错误信息的显示语言。参考Note 132090.1

.不能通过sql脚本设置NLS参数,必需通过alter session

B)实例级参数设置

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/6906/viewspace-21779/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/6906/viewspace-21779/

你可能感兴趣的文章
VNPY - CTA策略模块策略开发
查看>>
VNPY - 事件引擎
查看>>
MongoDB基本语法和操作入门
查看>>
学习笔记_vnpy实战培训day04_作业
查看>>
OCO订单(委托)
查看>>
学习笔记_vnpy实战培训day06
查看>>
回测引擎代码分析流程图
查看>>
Excel 如何制作时间轴
查看>>
股票网格交易策略
查看>>
matplotlib绘图跳过时间段的处理方案
查看>>
vnpy学习_04回测评价指标的缺陷
查看>>
ubuntu终端一次多条命令方法和区别
查看>>
python之偏函数
查看>>
vnpy学习_06回测结果可视化改进
查看>>
读书笔记_量化交易如何建立自己的算法交易01
查看>>
设计模式03_工厂
查看>>
设计模式04_抽象工厂
查看>>
设计模式05_单例
查看>>
设计模式06_原型
查看>>
设计模式07_建造者
查看>>