最近几天连着在PUB上看到两次这个错误了,这里记载一下。
错误发生在Oracle9201且CURSOR_SHARING设置为SIMILAR时:
SQL> SELECT * FROM V$VERSION;
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production PL/SQL Release 9.2.0.1.0 - Production
CORE 9.2.0.1.0 Production
TNS for 32-bit Windows: Version 9.2.0.1.0 - Production
NLSRTL Version 9.2.0.1.0 - Production
SQL> SHOW PARAMETER CURSOR_SHARING
NAME TYPE VALUE
-------------------------- ---------------------- -----------------
cursor_sharing string SIMILAR
SQL> DESC T
名称 是否为空? 类型
--------------------------------------- -------- -----------------
ID CHAR(2)
NAME VARCHAR2(30)
SQL> ALTER TABLE T MODIFY (ID CHAR(4));
ALTER TABLE T MODIFY (ID CHAR(4))
*第 1 行出现错误:
ORA-30496: 参数应该是常数。
解决错误的方法很简单,将CURSOR_SHARING设置为EXACT就可以了。
SQL> ALTER SESSION SET CURSOR_SHARING = EXACT;
会话已更改。
SQL> ALTER TABLE T MODIFY (ID CHAR(4));
表已更改。
问题很简单,解决也很容易。值得一提的是,Oracle的官方文档错误参考文档上没有包括30496错误号。在METALINK上查询,没有这个bug描述和具体解决方法,有人提过这个问题,但最终不了了之。
最后补充一句,如果先在EXACT设置下进行ALTER TABLE MODIFY的操作,可能将CURSOR_SHARING修改为SIMILAR后,仍然无法模拟出错误。这时通过刷新共享池就可以使这个错误出现。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-69134/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/4227/viewspace-69134/