場景:
.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);
}