数据库是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
?
答案 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)
好的,我重新启动了数据库,然后设置了格式!