.NET的Oracle sp调用错误(PLS-00306)

时间:2011-04-21 16:07:59

标签: c# .net oracle stored-procedures oracle11g

我有一个非常简单的存储过程如下:

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语句的结果。请帮忙。

1 个答案:

答案 0 :(得分:2)

您的过程未声明为接受任何参数,因此您无法传入数字。如果您想传入参数ali,您的过程声明需要类似

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

如果要传入并更改参数,则必须将其声明为IN OUT而不是IN

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#代码中的参数名称。