【问题标题】:ORA-06550: Wrong number or type of arguments error when calling a function inside an oracle package in ASP.NETORA-06550: 在 ASP.NET 中调用 oracle 包内的函数时出现错误的参数数量或类型错误
【发布时间】:2012-07-10 07:23:10
【问题描述】:

我在 Oracle 10g 数据库中名为 TEST 的 oracle 包中有一个函数

FUNCTION GetEname(P_ename IN VARCHAR2) RETURN VARCHAR2 AS
retVal VARCHAR2(10);
BEGIN
retVal := SUBSTR(P_ename, 3, INSTR(P_ename, ':', 1, 2) - 3);

RETURN RetVal;

END GetEntDefIEIDFromEname;

我创建了一个 ASP.net 页面,并且在 page_load 中有以下代码:

String strResult = "";
        try
        {   
            oracleConn.ConnectionString = ConfigurationManager.ConnectionStrings["OracleDatabase"].ConnectionString;
            oracleConn.Open();
            OracleCommand orclCmnd = new OracleCommand();
            orclCmnd.Connection = oracleConn;
            orclCmnd.CommandText = "TEST.GetEname";
            orclCmnd.CommandType = CommandType.StoredProcedure;

            OracleParameter ename = new OracleParameter();
            ename.ParameterName = "ename";
            ename.OracleType = OracleType.VarChar;
            ename.Direction = ParameterDirection.Input;
            ename.Value = "0:490330";
            orclCmnd.Parameters.Add(ename);

            strResult = (String)orclCmnd.ExecuteOracleScalar();

            oracleConn.Close();
            oracleConn.Dispose();

            lbl1.Text = "Result of  " + strResult;
        }                
        catch (Exception ex)
        {
            Console.Out.WriteLine(ex.ToString());
            oracleConn.Close();
        }

当我运行代码时,我收到以下错误消息:

"ORA-06550:第 1 行,第 7 列:\nPLS-00306:错误的数量或类型 调用“GETENAME”的参数\nORA-06550:第 1 行,第 7 列:\nPL/SQL: 语句被忽略\n"} System.Exception {System.Data.OracleClient.OracleException}

【问题讨论】:

    标签: c# asp.net oracle plsql


    【解决方案1】:

    您在代码中为参数使用了不同的名称。尝试改变

    ename.ParameterName = "ename";
    

    ename.ParameterName = "P_ename";
    

    需要为输出值添加一个参数:

    OracleParameter result = new OracleParameter();
    result.OracleType = OracleType.VarChar;
    result.Direction = ParameterDirection.ReturnValue;
    orclCmnd.Parameters.Add(result);
    

    并通过ExecuteNonQuery调用函数后从参数中获取值:

    orclCmnd.ExecuteNonQuery();
    strResult = result.Value.ToString();
    

    【讨论】:

    • 我试过了,现在我得到了这个错误“ORA-06550: line 1, column 7:\nPLS-00221: 'GETENAME' is not an procedure or is undefined\nORA-06550: line 1 ,第 7 列:\nPL/SQL:语句被忽略\n"} System.Exception {System.Data.OracleClient.OracleException}"
    • D Stanley 感谢您的帮助。我添加了结果输出参数并运行了应用程序。我收到一条错误消息,指出“参数‘参​​数 1’:没有为可变长度数据类型设置大小:字符串。”所以我添加了result.Size = 1024。我再次运行应用程序,但我收到“错误数量的类型”的原始错误消息
    • 谢谢你的工作。仍然需要将 result.Size 添加到它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多