为什么我们使用NLS_INSTANCE_PARAMETER?

时间:2016-03-31 17:56:55

标签: oracle oracle11g

例如:

Select * from nls_instance_parameter
where parameter = 'NLS_DATE_FORMAT';

PARAMETER               VALUE
NLS_DATE_FORMAT         DD-MON-RR

任何人都可以解释何时使用NLS_INSTANCE_PARAMETER?什么是NLS_INSTANCE_PARAMETER?

2 个答案:

答案 0 :(得分:1)

表名实际上是nls_instance_parameters(复数)。它全部在the docs

  

NLS参数确定两者上特定于语言环境的行为   客户端和服务器。

您提到的那个 - NLS_DATE_FORMAT - 定义了与TO_CHARTO_DATE函数一起使用的默认日期格式。

文档中的好例子:

  

设置默认日期格式以显示罗马数字   月,在初始化参数中包含以下行   文件:

     

NLS_DATE_FORMAT = "DD RM YYYY"

     

输入以下SELECT语句:

     

SELECT TO_CHAR(SYSDATE) currdate FROM dual;

     

如果今天的日期是2月12日,你会看到以下输出,   1997年:   12 II 1997

答案 1 :(得分:1)

如果设置,则NLS_INSTANCE_PARAMETERS会覆盖NLS_DATABASE_PARAMETERS中的设置,但会被NLS_SESSION_PARAMETERS覆盖。

有关此in the docuemntation的一些信息:

  

在执行CREATE DATABASE语句期间创建新数据库时,将建立与NLS相关的数据库配置。当前的NLS实例参数与数据库和国家字符集一起存储在数据字典中。在实例启动时从初始化参数文件中读取NLS实例参数。

And;

  

应用程序可以通过查询以下数据字典视图来检查会话,实例和数据库NLS参数:

     
      
  • NLS_SESSION_PARAMETERS显示查询视图的会话的NLS参数及其值。它不显示有关字符集的信息。
  •   
  • NLS_INSTANCE_PARAMETERS显示已显式设置的当前NLS实例参数以及NLS实例参数的值。
  •   
  • NLS_DATABASE_PARAMETERS显示数据库的NLS参数值。值存储在数据库中。
  •   

NLS设置有一个优先顺序。如果会话未显式设置NLS参数,则使用实例设置;如果实例未明确设置该参数,则使用数据库设置。

NLS_DATE_FORMAT是可能会改变的一个很好的例子。数据库在创建时设置了默认格式。如果pfile / spfile指定它,则在启动实例时优先。新会话将使用实例设置,或者如果未明确设置,则将继承数据库设置。但是许多客户端将设置NLS_DATE_FORMAT - 例如,SQL Developer允许您通过其首选项设置该设置和其他NLS设置;并且您可以ALTER SESSION SET NLS_DATE_FORMAT ...在会话期间再次更改它。

您不太可能需要直接引用NLS_INSTANCE_PARAMETERS,因为它不一定会告诉您有关当前会话的任何有用信息 - 因为并非所有值都已设置且某些值可能被覆盖。我认为,如果您需要了解任何当前会话设置,则查询NLS_SESSION_PARAMETERS更为正常。