前幾天遇到了一個(gè)存儲(chǔ)過程編譯無法通過的問題。
數(shù)據(jù)庫是10GR2 的版本
存儲(chǔ)過程編譯時(shí)報(bào) ORA-06553 PLS-320 錯(cuò)誤 以下是圖 
檢查過程語句無錯(cuò)后還是無法編譯通過
存儲(chǔ)過程非常簡(jiǎn)單,接收一個(gè)值,然后根據(jù)傳進(jìn)來的值對(duì)一個(gè)表進(jìn)行刪除操作。
檢查操作的表,是存在數(shù)據(jù)庫中的,并且表的狀態(tài)也是有效的。
網(wǎng)上找了下這錯(cuò)誤,并發(fā)現(xiàn)了一些類似情況的帖子,很多帖子的共同點(diǎn)都是表結(jié)構(gòu)中存在ORACLE 關(guān)鍵字。
于是檢查表結(jié)構(gòu)的字段名,發(fā)現(xiàn)有一個(gè)字段名為NUMBER (這很明顯是ORACLE 的關(guān)鍵字)
把這個(gè)NUMBER字段名改名,在重新編譯過程順利通過。
于是分析了下原因
有可能這是ORACLE PLSQL的一個(gè)BUG ,它在編譯的時(shí)候需要檢查過程中的對(duì)象的信息,由于對(duì)象中的字段是ORACLE 關(guān)鍵字
所以PLSQL無法區(qū)分是NUMBER 數(shù)據(jù)類型還是字段NUMBER,SQL語句通過給字段兩邊加“” 雙引號(hào)可以讓ORACLE 知道是字段不是關(guān)鍵字
由于沒有11G的環(huán)境無法測(cè)試11G是否解決了這問題
--------------------------------------
oracle 里修改字段名稱
alter table "CHECKEXACT" rename column "DATE" to date1; //這個(gè)DATE 要大寫且加"" ,要不然會(huì)出錯(cuò)的。。。
alter table "CHECKEXACT" rename column "DATE1" to "DATE";