有谁能告诉我这里我做错了什么?我正面临 Oracle.DataAccess.Client.OracleException
例外,当我点击查看我看到的详细信息时
ORA-06550:第1行第7列:PLS-00306:错误的数字或类型 调用'PRC_ABCD_GETALL'ORA-06550时的参数:第1行第7列: PL / SQL:忽略语句
我有这样的商店程序
PROCEDURE PRC_ABCD_GETALL (resultset_out OUT TYPES.cursorType)
AS
BEGIN
OPEN
resultset_out FOR SELECT * FROM ABCD;
END PRC_ABCD_GETALL;
我的C#代码就像这样
using (OracleConnection conn = new OracleConnection(cnn))
{
conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "PRC_ABCD_GETALL";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("resultset_out", OracleDbType.RefCursor,
ParameterDirection.Output);
OracleDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
result.Add(Construct(rdr));
}
}
答案 0 :(得分:0)
您必须在过程的声明中使用sys_refcursor而不是TYPES.cursorType。 Types.cursorType不是一样的。
您可以尝试更改c#调用数据类型,而不是在存储过程中更改它:
using (OracleConnection conn = new OracleConnection(cnn)){
conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "PRC_ABCD_GETALL";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("resultset_out", OracleType.Cursor,
ParameterDirection.Output);
OracleDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
result.Add(Construct(rdr));
}}