2015-09-28 79 views
1

我知道有很多這些東西,我基本上都經歷了所有這些,而且我似乎無法找到我的問題的答案。Oracle ORA-06502 PL/SQL:數字或值錯誤:字符到數字轉換錯誤

我有一個功能的軟件包如下:

C#我執行它像

using (var cmd = new OracleCommand("SCHEMA.MYPACKAGE.AFunction", conn)) 
{ 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.Add("AString1", "Param1"); 
    cmd.Parameters.Add("ANumber", 123); 
    cmd.Parameters.Add("AString2", "Param2"); 
    cmd.Parameters.Add("ReturnValue", OracleDbType.Varchar2).Direction = ParameterDirection.ReturnValue; 

    cmd.ExecuteNonQuery(); 
} 

其他信息:ORA-06502:PL/SQL:數字或值錯誤:字符到數字轉換錯誤 ORA-06512:在第1行

在調試中,我可以看到Param1,Param2ReturnValuevarchar2ANumber是Int32。即使我將ANumber更改爲Int64,它仍然不起作用,並且我不確定爲什麼會出現此錯誤,因爲一切都很正常。如果我犯了一個愚蠢的錯誤,任何人都可以指出我嗎?

如果我在蟾蜍中執行它,它的工作沒有問題。

DECLARE 
    RetVal VARCHAR2(200); 
    PARAM1 VARCHAR2(4000); 
    PARAM2 VARCHAR2(100); 
    ANUMBER NUMBER; 

BEGIN 
    PARAM1 := 'AParam1'; 
    ANUMBER := 123; 
    PARAM2 := 'AParam2'; 

    RetVal := SCHEMA.MYPACKAGE.AFunction (PARAM1, ANUMBER, PARAM2); 
    COMMIT; 
END; 

回答

2

調用函數時,返回的參數必須是集合中的第一個參數,所以

using (var cmd = new OracleCommand("SCHEMA.MYPACKAGE.AFunction", conn)) 
{ 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.Add("ReturnValue", OracleDbType.Varchar2).Direction = ParameterDirection.ReturnValue; 
    cmd.Parameters.Add("AString1", "Param1"); 
    cmd.Parameters.Add("ANumber", 123); 
    cmd.Parameters.Add("AString2", "Param2"); 

    cmd.ExecuteNonQuery(); 
} 
+0

我的話。這實在太好了。現在有不同的錯誤,但這是因爲varchar2的大小我確定 – Jaques

+0

需要在ReturnValue上指定大小。謝謝你的幫助。 – Jaques

+0

是的,輸出/返回參數必須具有適當的大小以支持所有返回的值。 – Husqvik