首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >包/存储过程中的alter session NLS_LENGTH_SEMANTICS=CHAR

包/存储过程中的alter session NLS_LENGTH_SEMANTICS=CHAR
EN

Stack Overflow用户
提问于 2014-10-22 18:38:22
回答 3查看 10.2K关注 0票数 6

我们的应用程序在oracle 10g数据库上运行,我们现在正计划将其迁移到exadata。为此,我们必须遵循exadata可以接受的一些遵从性。其中之一是在定义的开头将语句添加到每个现有的包/过程/函数中

代码语言:javascript
复制
alter session set NLS_LENGTH_SEMANTICS='CHAR'

我只想检查一下,改变会话来改变这个会话变量会不会影响代码的功能?在将此语句添加到所有对象时,我们必须记住哪些事情?

任何线索都将不胜感激

EN

Stack Overflow用户

发布于 2014-10-22 20:42:29

修订:

我之所以修改我的答案,是因为另一位受人尊敬的Oracle员工专家(Sergiusz Wolicki)提出了建议,并且修改了有关此参数的文档以警告不要将其设置为CHAR作为初始化参数,以及警告仍然存在于12.1

http://docs.oracle.com/database/121/NLSPG/ch3globenv.htm#NLSPG234

警告: Oracle强烈建议您不要在实例或服务器参数文件中将NLS_LENGTH_SEMANTICS参数设置为CHAR。这可能会导致许多现有安装脚本意外创建具有字符长度语义的列,从而导致运行时错误,包括缓冲区溢出。

注意:如果DDL脚本是在没有显式语义的情况下编写的,那么设置参数不会对其产生影响,但是,显然不能在Oracle产品脚本中安全地对其进行全面更新。

对于写得很好的代码,它肯定不会影响“代码功能”,它只是一个影响新字段宽度的设置。这里的症结似乎是你在多大程度上能够保证这一点。

然而,如果甲骨文对此发出警告,他们有经验和证据这样做。不知道长度语义的遗留应用程序或工具可能会受到影响。

由于向后兼容性,Oracle默认值传统上是BYTE,但是对于没有遗留的新数据库,更改它没有风险,也不会影响内部数据字典,因为无论NLS_LENGTH_SEMANTICS的数据库设置如何,这些都锁定在BYTE语义上。

票数 5
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26505576

复制
相关文章

相似问题

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