使用oracle資料庫開發,異常總結

2022-01-23 10:22:07 字數 1331 閱讀 7077

最近兩天使用的oracle資料庫開發專案時遇到了2個異常,第乙個是執行sql語句時報異常:「ora-00911: 無效字元」,如下圖:

sql語句如下:

斷點除錯,把sql語句拷貝到pl/sql裡執行,sql語句執行正常。反覆測試幾次後,去掉了sql語句結尾的分號,程式執行正常。

總結到:pl/sql裡執行的sql語句可以加分號,但是程式裡執行的sql語句字串結尾不要加分號。

第二個異常是:

ora-06550: 第 1 行, 第 7 列: 

pls-00306: wrong number or types of arguments in call to 'addoperationinfo'

ora-06550: 第 1 行, 第 7 列:

pl/sql: statement ignored

異常截圖如下:

呼叫的儲存過程如下:

根據異常提示,應該是說儲存過程的引數個數不對或者是儲存過程引數型別不對。

反覆對比程式傳入的引數個數和型別,與oracle裡儲存過程的引數個數和型別,是完全一模一樣的。困惑了很久後,測試發現,是由於c#程式傳入的字串型別引數entityid是null,儲存過程第313行判斷p_entityid is not null 時,插入到entityandoperation表。

即:程式裡傳入的是null,但是到資料庫裡用is not null判斷的的結果是true。

於是我在程式裡對entityid進行了判斷,當entityid為null時,p_entityid傳入的值為system.dbnull.value,如下圖:

這樣的話,實現了我想要的效果,而不報錯:

當entityid不為null時,儲存過程第313行if語句返回true,執行儲存過程的第314行插入語句;

當entityid為null值時,傳入的是system.dbnull.value,儲存過程第313行if語句返回false,不執行第314行插入語句。

Oracle資料庫 異常處理

oracle異常處理 在pl sql語句書寫時,需要處理的異常 不做異常處理時 declare v name emp.ename type v sal emp.sal type begin select ename,sal into v name,v sal from emp where empno...

Oracle資料庫dmp匯入異常

一 場景 由於正式環境資料庫需整理更新一次,便打算把正式環境資料庫匯出了乙份檔案準備更新到自己電腦本地。當時沒太注意到個問題,就是本地和正式環境的資料庫版本不一樣,正式環境的資料庫版本是12c的而我自己本地的是11r2的,以至於匯入dmp檔案時出現多次問題,最後發現只需要修改dmp檔案的對應版本號,...

Oracle資料庫的異常處理

一 說明 oracle資料庫底冊定義了很多異常,每個異常都有乙個唯一的編碼,這些異常之中,有一些是常見的,oracle給這些異常定義了名稱,可以直接使用,其他沒有名稱直郵編碼的不能直接使用。二 分類 1 預定義異常 既有編碼又有名稱的異常是預定義異常,此類異常可以直接使用 2 非預定義異常 有編碼但...