也談Oracle異常: ORA-06502: PL/SQL: 數字或值錯誤 : 字符串緩沖區太小


場景:

.Net程序調用Oracle方法 command.ExecuteNonQuery()執行存儲過程;彈出如標題異常信息。

存儲過程有4個輸入參數,一個輸出參數。一旦執行到給輸出參數賦值的時候就報錯。但在Plsql環境下調度,是正常的。

分析:

查閱各帖子,都說是變量長度不夠,但設置也無果。

后來,懷疑是不是設置參數順序有問題,調整,搞定。

解決:

存儲過程中定義的參數,第一個為out,雖然在設置參數時,用了參數名,但好像沒起什么作用。所以,把輸出參數第一個設置,與定義順序一致,就OK了。

另外:輸出參數長度是必須指定的。這里,我是通過給定一個無意義的初始值(做占位符用)。

//定義輸出參數

Dictionary<string, object> dicOut = new Dictionary<string, object>();
dicOut.Add("djdh", "11111111111111111111");

定義存儲過程:

CREATE OR REPLACE PROCEDURE gendh(djdh OUT VARCHAR2,
djlx IN VARCHAR2,
rq IN VARCHAR2,
dwdm IN VARCHAR2,
csfs IN VARCHAR2) IS……

后台服務中的存儲過程方法定義:

// 設置輸出參數
foreach (KeyValuePair<string, object> kvp in dicParaOut)
{
command.Parameters.Add(kvp.Key, OracleDbType.Varchar2, kvp.Value.ToString().Length).Direction = ParameterDirection.Output;
}

//設置輸入參數

foreach (KeyValuePair<string, object> kvp in dicIn)
{
command.Parameters.Add(kvp.Key, OracleDbType.Varchar2, kvp.Value, ParameterDirection.Input);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM