- 取得連結
- X
- 以電子郵件傳送
- 其他應用程式
此例外狀況大部分是有資料庫變數尚未設定,PL/SQL 忽略或 OracleParameter 沒有新增。
但在此案例中,大部分是可以執行,但在某些條件下會出現 ORA-01006 例外狀況。
文章環境
- Orcale Data Provider for .NET
此文章使用部分程式碼片段描述案例。
問題
PL/SQL 片段
/* 以上忽略 */
WHERE A.DATE = :DATE
AND A.CODE = :CODE
AND B.CODE <> SUBSTR(:CODE,-4)
CSharp 程式碼片段
this.cmd.Parameters.Add(":DATE",OracleDbType.Date);
this.cmd.Parameters.Add(":CODE",OracleDbType.Varchar2, 8);
OracleParameter 加入了兩個查詢變數「:DATE」「:CODE」 原本執行都沒有甚麼問題,但是在某些特定案例卻會出現「ORA-01006: 連結變數不存在」。
解決方式
OracleCommand 有一個屬性是 BindByName,將屬性的數值設定為 True 即可
this.cmd.Parameters.BindByName = true;
可能是原本的 CASE 並不會執行到 SUBSTR(:CODE,-4) 所以並沒有問題,但在特定案例下會需要使用到 SUBSTR(:CODE,-4) 所以才會出現變數不存在的例外情況(沒有設定第三個 OracleParameter 變數 :CODE)
留言
張貼留言