oracle - 在包/存储过程中改变 session NLS_LENGTH_SEMANTICS=CHAR

标签 oracle session plsql oracle10g session-variables

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

alter session set NLS_LENGTH_SEMANTICS='CHAR'

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

任何线索将不胜感激

最佳答案

修订:

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

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

Caution: Oracle strongly recommends that you do NOT set the NLS_LENGTH_SEMANTICS parameter to CHAR in the instance or server parameter file. This may cause many existing installation scripts to unexpectedly create columns with character length semantics, resulting in run-time errors, including buffer overflows.



警告:
如果 DDL 脚本是在没有明确语义的情况下编写的,那么设置参数不会影响它,但是,它显然不是在 Oracle 产品脚本中全面安全更新的内容。

使用编写良好的代码,它肯定不会影响“代码功能”,它是一个只会影响新字段宽度的设置。这里的关键似乎是你有多舒服,你可以保证这一点。

但是,如果 Oracle 对此发出警告,他们就有这样做的经验和证据。不了解长度语义的旧版应用程序或工具可能会受到影响。

Oracle 默认值传统上是 BYTE由于向后兼容,但对于具有 的新数据库没有遗留的东西 ,更改它没有风险,并且不会影响内部数据字典,因为它们被锁定到 BYTE无论 NLS_LENGTH_SEMANTICS 的数据库设置如何。

关于oracle - 在包/存储过程中改变 session NLS_LENGTH_SEMANTICS=CHAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26505576/

相关文章:

oracle - 无需DBA权限即可更改不同数据库下多个模式的密码?

oracle - 用于 PL/SQL 开发的免费软件工具

甲骨文顶点 : Scale image to screen

php - 将 mysql 结果存储到 $_SESSION[] 变量中

c# - C# 中 Windows 窗体应用程序的 session

stored-procedures - PL/SQL : Passing lexical parameter to a stored procedure

sql - 从一列嵌套表中选择 SQL

sql - 带有 MINUS INTERSECT 和 UNION 的 SELECT 子句

linux - 如何查找 Linux 服务器上安装的 Oracle 版本(在终端中)

javascript - 即使用户已连接,Facebook Javascript SDK FB.getLoginStatus也会返回空 session