我有一个非常简单的存储过程如下:
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语句的结果。请帮忙。
答案 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#代码中的参数名称。