首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改nls_length_semantics后重新编译包

更改nls_length_semantics后重新编译包
EN

Stack Overflow用户
提问于 2010-08-03 15:30:07
回答 2查看 2.4K关注 0票数 2

我有一个数据库,其中的nls_length_semantics值已从字节更改为字符。是否有必要重新编译所有具有外部访问的基于varchar2的数据类型的包(例如dbms_sql)?

EN

回答 2

Stack Overflow用户

发布于 2014-10-14 11:38:49

@GWu在我看来是错误的。至少,他的精神是错误的。这不是匮乏的问题,而是需要的问题。然而,他也是正确的,因为他说:这取决于。

如果数据库中的底层数据是多字节的,则确实需要重新编译包。

虽然我的表中的底层数据是以Unicode格式编译的,但我今天在以字节格式编译包时遇到了问题。表被显式地定义为是(例如) VARCHAR2(20 CHAR),而我的PL/SQL包中的代码仅定义为VARCHAR2(20)。

这意味着以长度50定义的数据库中的列并不总是适合于定义为长度50的PL/SQL变量。因此,我的用户一直在报告许多“字符缓冲区太小”的错误。

如果您有与我相同的情况,则需要重新编译包。

然而,我真正想知道的是,如何知道包是否以字节格式编译。这样,我就可以确切地知道需要重新编译我的哪些包了。在不知道这一点的情况下,我没有一种积极主动地重新编译它们的方法。我只需要等待用户报告问题。

我想我当然可以重新编译它们,但是这会在用户还在的时候锁定我的数据库。因此,我不得不重新安排一些停机时间来解决整个问题:

-编辑--

在发帖之前,应该先阅读@AlexPoole的评论。视图dba_plsql_object_settings提供了我需要的信息!

票数 2
EN

Stack Overflow用户

发布于 2012-07-06 16:55:43

简短答覆:视乎情况而定:-)

如果您希望您的现有包使用char语义,则需要重新编译。否则,它们将保留编译时的设置。从技术角度来看,没有必要重新编译。

而且绝对没有必要重新编译SYS拥有的包(比如dbms_sql)。

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

https://stackoverflow.com/questions/3398076

复制
相关文章

相似问题

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