0
我一直在拉我的头发,试图从返回引用游标的oracle存储函数返回结果集。试图调用一个Oracle存储函数,将参考光标返回给C#
这里是由Oracle存储函数的声明:
TYPE GetInspectorCursor IS REF CURSOR;
FUNCTION GetInspectorInformation
(inUserID IN inspectortable.userid%type,
inPassword IN inspectortable.password%type,
inCompanyID IN inspectortable.cid%type,
inSubCompanyID in inspectortable.scid%type,
outErrorcode OUT NUMBER)
RETURN GetInspectorCursor;
这里是我的C#程序,以获取结果集:
String connString = "DATA SOURCE=PEOPLE.WORLD;PASSWORD=password;PERSISTSEC CURITY INFO=True;USER ID=userid";
DataSet ds;
OracleDataAdapter myAdapter = null;
Oracle.DataAccess.Types.OracleRefCursor refCursor = null;
OracleConnection myCon = new OracleConnection(connString);
String commandText = "schema.package.GetInspectorInformation";
OracleCommand cmd = new OracleCommand(commandText, myCon);
cmd.CommandType = CommandType.StoredProcedure;
// inpectorID
OracleParameter param = new OracleParameter();
param.OracleDbType = OracleDbType.Char;
param.Direction = ParameterDirection.Input;
param.Value = "JOHN";
cmd.Parameters.Add(param);
// inspector Password
OracleParameter param2 = new OracleParameter();
param2.OracleDbType = OracleDbType.Char;
param2.Direction = ParameterDirection.Input;
param2.Value = "12345";
cmd.Parameters.Add(param2);
// VALUE 1
OracleParameter param3 = new OracleParameter();
param3.OracleDbType = OracleDbType.Char;
param3.Direction = ParameterDirection.Input;
param3.Value = "VA1";
cmd.Parameters.Add(param3);
// VALUE 2
OracleParameter param4 = new OracleParameter();
param4.OracleDbType = OracleDbType.Char;
param4.Direction = ParameterDirection.Input;
param4.Value = "VA2";
cmd.Parameters.Add(param4);
// outParam Error Code
OracleParameter param5 = new OracleParameter();
param5.OracleDbType = OracleDbType.Decimal;
param5.Direction = ParameterDirection.Output;
//param5.IsNullable = true;
cmd.Parameters.Add(param5);
OracleParameter param6 = new OracleParameter();
param.ParameterName = "RefCursor";
param6.OracleDbType = OracleDbType.Object;
param6.OracleDbTypeEx = OracleDbType.RefCursor;
param6.Direction = ParameterDirection.ReturnValue;
///param6.IsNullable = false;
cmd.Parameters.Add(param6);
myCon.Open();
cmd.ExecuteNonQuery();
refCursor = (Oracle.DataAccess.Types.OracleRefCursor)cmd.Parameters["RefCursor"].Value;
myAdapter = new OracleDataAdapter("", myCon);
ds = new DataSet("testDS");
myAdapter.Fill(ds, refCursor);
// Clean up
cmd.Dispose();
myCon.Close();
myCon.Dispose();
在myCon.Open()调用我得到:
ORA-06550: line 1, column 15:
PLS-00306: wrong number or types of arguments in call to 'GETINSPECTORINFORMATION'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
是否有人会善待一些脑细胞,并告诉我哪些参数正在通过rectly?
谢谢!
是的!谢谢!然而,在我的情况下,我需要一个通过调用函数返回的参考光标。 – user2175101 2013-03-17 23:12:03