前几天遇到了一个存储过程编译无法通过的问题。
数据库是10GR2 的版本
存储过程编译时报 ORA-06553 PLS-320 错误 以下是图
检查过程语句无错后还是无法编译通过
存储过程非常简单,接收一个值,然后根据传进来的值对一个表进行删除操作。
检查操作的表,是存在数据库中的,并且表的状态也是有效的。
网上找了下这错误,并发现了一些类似情况的帖子,很多帖子的共同点都是表结构中存在ORACLE 关键字。
于是检查表结构的字段名,发现有一个字段名为NUMBER (这很明显是ORACLE 的关键字)
把这个NUMBER字段名改名,在重新编译过程顺利通过。
于是分析了下原因
有可能这是ORACLE PLSQL的一个BUG ,它在编译的时候需要检查过程中的对象的信息,由于对象中的字段是ORACLE 关键字
所以PLSQL无法区分是NUMBER 数据类型还是字段NUMBER,SQL语句通过给字段两边加“” 双引号可以让ORACLE 知道是字段不是关键字
由于没有11G的环境无法测试11G是否解决了这问题
--------------------------------------
oracle 里修改字段名称
alter table "CHECKEXACT" rename column "DATE" to date1; //这个DATE 要大写且加"" ,要不然会出错的。。。
alter table "CHECKEXACT" rename column "DATE1" to "DATE";