执行alter system后,日期格式不会更改

时间:2016-08-22 06:51:34

标签: oracle oracle11g oracle11gr2

数据库是Oracle 11g2 Express。我执行alter system set NLS_DATE_FORMAT = "DD/MM/RRRR" SCOPE=SPFILE;,然后我查询了select hire_date from employees;但显示的格式仍为DD / MM / RR!那么如何永久地更改nls_date_format

3 个答案:

答案 0 :(得分:1)

SCOPE = SPFILE,仅在静态参数文件中进行更改,但不在当前实例中进行更改。重新启动数据库时,将使用SPFILE中的新值构建实例。

SCOPE = MEMORY,在当前实例中进行更改,但不在静态参数文件中进行更改。重新启动数据库时,将使用旧值构建实例。所以你失去了变化。

SCOPE = BOTH,在当前实例和静态参数文件中进行更改。

每次重新启动数据库时,都会使用静态参数文件中的值构建实例。在您的情况下,重新启动时,实例是使用更改的值构建的。所以在重新启动数据库后它正在工作。如果您已将值BOTH用于SCOPE,那么您无需重新启动数据库。

希望这有帮助。

答案 1 :(得分:0)

您可以在不同级别设置NLS参数

作为实例/服务器上的初始化参数。

SQL>alter system set V$NLS_PARAMETER = 'XXX' scope = both;

作为客户端上的环境变量。

% setenv NLS_SORT FRENCH

作为ALTER SESSION参数。

SQL> ALTER SESSION SET V$NLS_PARAMETER = = 'XXX'

任何设置都会覆盖更高级别的设置。因此,设置服务器端并不能保证所有连接的客户端都使用该设置。

如果要确保为每个连接的客户端设置使用登录触发器。即使这样,用户也可以明确覆盖“默认”设置

LOGON TRIGGER在会话级别设置这些参数。

CREATE OR REPLACE TRIGGER sys.schema_nls_session_settings AFTER LOGON ON BOB.SCHEMA
BEGIN
execute immediate 'alter session set NLS_LANGUAGE=''ENGLISH''';
execute immediate 'alter session set NLS_TERRITORY=''UNITED KINGDOM''';
execute immediate 'alter session set NLS_CURRENCY=''£''';
execute immediate 'alter session set NLS_ISO_CURRENCY=''UNITED KINGDOM''';
END;
/

答案 2 :(得分:0)

好的,我重新启动了数据库,然后设置了格式!