我的Oracle 12c数据库有以下问题。
我必须安装第三方应用程序,它需要一个Oracle数据库实例。供应商要求将NLS_LENGTH_SEMANTICS参数设置为CHAR。但是,甲骨文强烈建议不要在全球范围内将其从BYTE更改为CHAR。
我的解决方案是创建一个触发器,以更改会话的参数。触发器如下所示:
create or replace TRIGGER SYS.ALTER_NLS_FOR_SAPIENT
AFTER LOGON on DATABASE
BEGIN
IF ( user like 'SAPIENT%' ) THEN
execute immediate 'ALTER SESSION SET NLS_LENGTH_SEMANTICS="CHAR"';
END IF;
END;不幸的是,触发器不会更改会话参数。我怀疑触发器没有启动,所以我通过将文件写入磁盘来确保触发。肯定是被触发的。
如果我从客户端更改session参数(例如,),则设置该参数。
ALTER SESSION SET NLS_LENGTH_SEMANTICS="CHAR";
select * from NLS_SESSION_PARAMETERS where parameter='NLS_LENGTH_SEMANTICS';
有人知道为什么不能从服务器端设置NLS_LENGTH_SEMANTICS参数吗?
系统信息

发布于 2019-11-29 07:33:51
这是可能的。
$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Fri Nov 29 08:29:35 2019
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size 2932632 bytes
Variable Size 343933032 bytes
Database Buffers 721420288 bytes
Redo Buffers 5455872 bytes
Database mounted.
Database opened.
SQL> create user sapient identified by sapient;
User created.
SQL> grant create session to sapient;
Grant succeeded.
SQL> show parameter seman
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
nls_length_semantics string BYTE
SQL> create or replace TRIGGER SYS.ALTER_NLS_FOR_SAPIENT
AFTER LOGON on DATABASE
BEGIN
IF ( user like 'SAPIENT%' ) THEN
execute immediate 'ALTER SESSION SET NLS_LENGTH_SEMANTICS="CHAR"';
END IF;
END; 2 3 4 5 6 7
8 /
Trigger created.
SQL> grant select_catalog_role to sapient;
Grant succeeded.
SQL> connect sapient/sapient
Connected.
SQL> show parameter seman
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
nls_length_semantics string CHAR
SQL>发布于 2021-03-12 17:44:06
附加音符,因为我不明白它“不工作”对我(但它是)。
在上,NLS参数由工具提供,因此触发器在那里无法工作。
您可以从工具->Preferences->Database-> NLS中更改NLS参数
从文件中:
NLS参数窗格指定全球化支持参数的值,例如语言、区域、排序首选项和日期格式。这些参数值用于session会话操作,例如用于使用SQL工作表执行的语句和国家语言支持参数报告。
https://dba.stackexchange.com/questions/254417
复制相似问题