2011-04-21 43 views
0

我有如下一個非常簡單的存儲過程調用錯誤:甲骨文SP與.NET(PLS-00306)

create or replace procedure WF_ALI is 
ali number; 
begin 
ali :=2; 
end; 

和下方的.NET代碼:

GetDatabaseConnection(); 
sqlString = "WF_ALI"; 
command = new OracleCommand(sqlString, connection); 
command.CommandType = System.Data.CommandType.StoredProcedure; 
command.Parameters.Add("ali", OracleType.Number); 
command.Parameters["ali"].Value = 4; 
int32 rowsAffected = command.ExecuteNonQuery; 

然而,返回錯誤

PLS-00306: wrong number or types of arguments in call to WF_ALI. 

我也嘗試過使用Toad for Oracle。當我執行該sp時,它將返回相同的錯誤。

我可以連接到數據庫。這沒有問題。我甚至可以獲得SELECT語句的結果。請幫忙。

回答

2

你的過程中沒有說明採取任何參數,所以你不能傳遞一個數字。如果你想在參數ali通過,你的程序申報將需要像

CREATE OR REPLACE PROCEDURE wf_ali(ali IN NUMBER) 
IS 
BEGIN 
    <<do something>> 
END; 

如果要在傳遞和更改的參數,你必須將其聲明爲IN OUT,而不是

CREATE OR REPLACE PROCEDURE wf_ali(ali IN OUT NUMBER) 
IS 
BEGIN 
    ali := 2; 
END; 

一般,但是,它的前綴參數名稱是一個好主意,這樣沒有風險,一個參數名稱會與列衝突在一個表中,即

CREATE OR REPLACE PROCEDURE wf_ali(p_ali IN OUT NUMBER) 
IS 
BEGIN 
    p_ali := 2; 
END; 

這當然會要求你改變你的C#代碼中的參數名稱。

+0

嘿賈斯汀感謝您的幫助..我先試了一下,沒有問題。但是,當我對這些真正的代碼做出適當的迴應時,又出現了同樣的問題。你能幫我嗎? – iblis 2011-04-22 08:00:03