【发布时间】: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