首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过触发器为会话设置NLS_LENGTH_SEMANTICS

通过触发器为会话设置NLS_LENGTH_SEMANTICS
EN

Database Administration用户
提问于 2019-11-29 07:23:06
回答 2查看 1.3K关注 0票数 1

我的Oracle 12c数据库有以下问题。

我必须安装第三方应用程序,它需要一个Oracle数据库实例。供应商要求将NLS_LENGTH_SEMANTICS参数设置为CHAR。但是,甲骨文强烈建议不要在全球范围内将其从BYTE更改为CHAR

我的解决方案是创建一个触发器,以更改会话的参数。触发器如下所示:

代码语言:javascript
复制
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参数(例如,),则设置该参数。

代码语言:javascript
复制
ALTER SESSION SET NLS_LENGTH_SEMANTICS="CHAR";
select * from NLS_SESSION_PARAMETERS where parameter='NLS_LENGTH_SEMANTICS';

有人知道为什么不能从服务器端设置NLS_LENGTH_SEMANTICS参数吗?

系统信息

EN

回答 2

Database Administration用户

回答已采纳

发布于 2019-11-29 07:33:51

这是可能的。

代码语言:javascript
复制
$ 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>
票数 2
EN

Database Administration用户

发布于 2021-03-12 17:44:06

附加音符,因为我不明白它“不工作”对我(但它是)。

在上,NLS参数由工具提供,因此触发器在那里无法工作。

您可以从工具->Preferences->Database-> NLS中更改NLS参数

从文件中:

NLS参数窗格指定全球化支持参数的值,例如语言、区域、排序首选项和日期格式。这些参数值用于session会话操作,例如用于使用SQL工作表执行的语句和国家语言支持参数报告。

Sql文档

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/254417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档