【问题标题】:Oracle sp call error with .NET (PLS-00306).NET 的 Oracle sp 调用错误 (PLS-00306)
【发布时间】:2011-08-10 10:43:36
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    您的过程未声明接受任何参数,因此您不能传入数字。如果您想传入参数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# 代码中的参数名称。

    【讨论】:

    • 嘿,贾斯汀,谢谢你的帮助。我先试了一下,没有问题。但是当我把它应用到真正的代码时,同样的问题又出现了。你能帮我吗?
    猜你喜欢
    • 2018-11-24
    • 2015-09-09
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多