【问题标题】:Stored procedure in Oracle using Select Command and Variables giving errorOracle中的存储过程使用选择命令和变量给出错误
【发布时间】:2016-08-02 11:06:53
【问题描述】:

由于我是 Oracle 11G 的新手,我正在尝试弄清楚 Oracle 存储过程

这是我的 MS SQL 存储过程

Create procedure LoadLoginData
@username varchar(50),
@password varchar(50)
as
begin
select * from Employee_table where
username = @username and password = @password
end

当我使用 Oracle Scratch Editor 时,我得到了这个输出

CREATE OR REPLACE PROCEDURE LoadLoginData
(
  v_username IN VARCHAR2 DEFAULT NULL ,
  v_password IN VARCHAR2 DEFAULT NULL ,
  cv_1 OUT SYS_REFCURSOR
)
AS

BEGIN
   OPEN  cv_1 FOR
      SELECT * 
        FROM employee_table 
        WHERE Username = v_username
                AND PASSWORD = v_password ;
END;

当我在 C# 中调用 Oracle 过程时,它会抛出此异常

“ORA-06550:第 1 行,第 7 列:PLS-00306:错误的数量或类型 调用 'LOADLOGINDATA' ORA-06550 中的参数:第 1 行,第 7 列:"

知道如何解决这个问题吗?

我的 C# 代码

OracleConnection ocon = new OracleConnection(orastr);
        OracleCommand ocmd = new OracleCommand("LoadLoginData", ocon);
        ocmd.CommandType = CommandType.StoredProcedure;
        ocon.Open();

        try
        {
            ocmd.Parameters.Add("Username", nBo.username);
            ocmd.Parameters.Add("Password", nBo.password);
            OracleDataAdapter oda = new OracleDataAdapter(ocmd);            
            DataSet ds = new DataSet();
            oda.Fill(ds);
            DataTable dt = ds.Tables[0];
            return dt;
        }
        catch (Exception ex)
        {

            throw ex;
        }
        finally
        {
            ocon.Dispose();
            ocon.Close();
            nBo = null;
        }

【问题讨论】:

  • 错误不在您的存储过程中,而是在您对存储过程的调用中。你用什么 SQL 来调用它?
  • 我正在使用 Oracle Managed Drive ODP.NET Framework 4.5.2
  • “nBo.username”或“nBo.password”的类型是什么?您可以尝试从 oracle 过程中删除“DEFAULT NULL”吗?
  • 两者都是字符串格式。
  • @SurajitBiswas 我按照你的建议尝试了,但给出了同样的错误

标签: c# oracle stored-procedures plsql


【解决方案1】:

您的 Procedure2 个输入 参数和 1 个输出 参数。 ..您的 C# 代码有 2 个输入 参数,但 没有输出 参数

Java 级别,我会以以下方式处理它:

callableStatement.registerOutParameter(3, OracleTypes.CURSOR);

C#中,请寻找相同的东西(如何处理)...我建议

ocmd.Parameters.Add("cv_1", OracleDbType.RefCursor, ParameterDirection.Output);

【讨论】:

    猜你喜欢
    • 2015-05-02
    • 2015-05-02
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2010-11-23
    • 2019-05-13
    • 1970-01-01
    相关资源
    最近更新 更多