[英]ORA-06550:wrong number or types of arguments in call to 'CHECK_INFO_INS'
[英]C# - ORA-06550:wrong number or types of arguments in call to 'DOPROCESS'
編輯:請參閱帖子 #2
我已經搜索了這里的線程,但我無法弄清楚為什么我會收到 ORA-06550 消息。
Oracle 中的 PL/SQL 處理沒有錯誤。
存儲的 PROC 接收 5 個參數,我正在嘗試輸出單個 NUMBER 參數以進行異常處理。
請告訴我我做錯了什么。
PL/SQL
PROCEDURE DoProcess( ocn IN WAREHOUSE.BANK_STATEMENT_ACTIVITY.CHECK_NO%TYPE,
oca IN WAREHOUSE.BANK_STATEMENT_ACTIVITY.AMOUNT%TYPE,
ecn IN WAREHOUSE.BANK_STATEMENT_ACTIVITY.CHECK_NO%TYPE,
eca IN WAREHOUSE.BANK_STATEMENT_ACTIVITY.AMOUNT%TYPE,
usr IN WAREHOUSE.BANK_STATEMENT_ACTIVITY.OVERRIDDEN_USER_ID%TYPE,
errCode OUT NUMBER )
AS
BEGIN
Initialize( ocn, oca, ecn, eca, usr );
DBMS_OUTPUT.PUT_LINE('ocn: ' || ocn || CHR(10) ||
'oca: ' || oca || CHR(10) ||
'ecn: ' || ecn || CHR(10) ||
'eca: ' || eca || CHR(10) ||
'usr: ' || usr);
IF IsValid( bsa_rec.CHECK_NO, errCode ) THEN UpdateProc;
--DBMS_OUTPUT.PUT_LINE('errCode: ' || errCode);
END IF;
END DoProcess;
C#
public Int32 BankDataExceptionsDoProcess(string ckNo, string ckAmt, string checkNo, string checkAmt, string user)
{
Int32 errCode = 0;
ckNo = ckNo.Trim();
double dblCkAmt = double.Parse(ckAmt.Trim());
checkNo = checkNo.Trim();
double dblCheckAmt = double.Parse(checkAmt.Trim());
int uid = int.Parse(user);
object obj = null;
if (DBC == null)
DBC = new DBConn();
DBC.ExecutePackage(Vars.pkgBankDataExceptions,
out obj,
new ParameterDirection[] { ParameterDirection.Input,
ParameterDirection.Input,
ParameterDirection.Input,
ParameterDirection.Input,
ParameterDirection.Input,
ParameterDirection.Output },
new object[] { ckNo, dblCkAmt, checkNo, dblCheckAmt, uid, errCode }
);
return errCode;
}
不能在 ADO.NET 中為 OUTPUT 參數使用現有變量。
cmd.Parameters.Add("OutputParam", OracleDbType.Int32).Direction = ParameterDirection.Output;
然后在執行后引用它:
if(cmd.Parameters["OutputParam"] != null)
{
int returnValue = int.Parse(cmd.Parameters["OutputParam"].Value);
}
我錯過了一小段代碼。 無論 oracle 數據類型如何,默認輸出對象似乎都包含所有字符串。
這是缺少的代碼:
errCode = int.Parse(obj.ToString());
整個C#方法:
public int BankStmntExceptionsDoProcess(string ckNo, string ckAmt, string checkNo, string checkAmt, string user)
{
int errCode = 0;;
ckNo = ckNo.Trim();
ckAmt = ckAmt.Trim();
checkNo = checkNo.Trim();
checkAmt = checkAmt.Trim();
user = user.Trim();
object obj = null;
if (DBC == null)
DBC = new DBConn();
DBC.ExecutePackage(Vars.pkgBankStatementProcessing,
out obj,
new ParameterDirection[] { ParameterDirection.Input,
ParameterDirection.Input,
ParameterDirection.Input,
ParameterDirection.Input,
ParameterDirection.Input,
ParameterDirection.Output,
},
new object[] { ckNo, ckAmt, checkNo, checkAmt, user, errCode }
);
errCode = int.Parse(obj.ToString());
return errCode;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.