{
//Aqui se utiliza el modelo de objetos directo de Oracle DataAccess, para ello vamos a crear todos los parametros
//de SP incluido el de tipo REF Cursor que en el modelo de objetos de dotnet
//crea un OracleRadaReader, el cual en el oracleclient tradicional de dot net no está disponible de manera natural.
Oracle.DataAccess.Client.OracleConnection OraConn = new Oracle.DataAccess.Client.OracleConnection();
OraConn.ConnectionString = "Data Source=$#RVER;User ID=U$#R;Password=PA$%ORD;";
OraConn.Open();
Oracle.DataAccess.Client.OracleCommand OraComm = new Oracle.DataAccess.Client.OracleCommand("SP_NAME", OraConn);
OraComm.CommandType = CommandType.StoredProcedure;
OraComm.Parameters.Add ("p1",Oracle.DataAccess.Client.OracleDbType.Int32) ;
OraComm.Parameters.Add("p2",Oracle.DataAccess.Client.OracleDbType.Int32);
OraComm.Parameters.Add("precordset", Oracle.DataAccess.Client.OracleDbType.RefCursor, ParameterDirection.Output);
Oracle.DataAccess.Client.OracleDataReader OraDR = OraComm.ExecuteReader();
while (OraDR.Read()) {
//procesamiento del cursor retornado en el datareader
}
}
//de SP incluido el de tipo REF Cursor que en el modelo de objetos de dotnet
//crea un OracleRadaReader, el cual en el oracleclient tradicional de dot net no está disponible de manera natural.
Oracle.DataAccess.Client.OracleConnection OraConn = new Oracle.DataAccess.Client.OracleConnection();
OraConn.ConnectionString = "Data Source=$#RVER;User ID=U$#R;Password=PA$%ORD;";
OraConn.Open();
Oracle.DataAccess.Client.OracleCommand OraComm = new Oracle.DataAccess.Client.OracleCommand("SP_NAME", OraConn);
OraComm.CommandType = CommandType.StoredProcedure;
OraComm.Parameters.Add ("p1",Oracle.DataAccess.Client.OracleDbType.Int32) ;
OraComm.Parameters.Add("p2",Oracle.DataAccess.Client.OracleDbType.Int32);
OraComm.Parameters.Add("precordset", Oracle.DataAccess.Client.OracleDbType.RefCursor, ParameterDirection.Output);
Oracle.DataAccess.Client.OracleDataReader OraDR = OraComm.ExecuteReader();
while (OraDR.Read()) {
//procesamiento del cursor retornado en el datareader
}
}
catch (Exception ex) {
//manejo del error
//manejo del error
}
Consumo del REF Cursor desde VB6
Private cnn As ADODB.ConnectionPrivate cmd As ADODB.CommandPrivate RS As ADODB.Recordset
Public Sub GetCursorFromOracle()
Set cnn = New ADODB.ConnectionSet cmd = New ADODB.Command
'Muy importante en la cadena de conexion usar el proveedor de datos de Oracle y habilitar el flag de retorno de RecordSets tipo PLSQL, PLSQLRSet=1
cnn.ConnectionString = "Provider=OraOLEDB.Oracle;Data Source=U$ER;User ID=tmdan;Password=PA$WORD;PLSQLRSet=1"
cnn.Opencmd.ActiveConnection = cnncmd.CommandType = adCmdStoredProccmd.CommandText = "SP_NAME"
'Se definen los parametros que excepto el de tipo cursor
cmd.Parameters.Append cmd.CreateParameter("p1", adVarChar, adParamInput, 100, "")
cmd.Parameters.Append cmd.CreateParameter("p2", adNumeric, adParamInput, 10)
Set RS = cmd.Execute
Do While Not (RS.EOF)
'hacer lo que se necesite con los datos RS(0).Value …
RS.MoveNext
Loop
' Limpieza de objetos
cnn.Close
Set cnn = Nothing
Set cmd = Nothing
Set RS = Nothing
End Sub
Public Sub GetCursorFromOracle()
Set cnn = New ADODB.ConnectionSet cmd = New ADODB.Command
'Muy importante en la cadena de conexion usar el proveedor de datos de Oracle y habilitar el flag de retorno de RecordSets tipo PLSQL, PLSQLRSet=1
cnn.ConnectionString = "Provider=OraOLEDB.Oracle;Data Source=U$ER;User ID=tmdan;Password=PA$WORD;PLSQLRSet=1"
cnn.Opencmd.ActiveConnection = cnncmd.CommandType = adCmdStoredProccmd.CommandText = "SP_NAME"
'Se definen los parametros que excepto el de tipo cursor
cmd.Parameters.Append cmd.CreateParameter("p1", adVarChar, adParamInput, 100, "")
cmd.Parameters.Append cmd.CreateParameter("p2", adNumeric, adParamInput, 10)
Set RS = cmd.Execute
Do While Not (RS.EOF)
'hacer lo que se necesite con los datos RS(0).Value …
RS.MoveNext
Loop
' Limpieza de objetos
cnn.Close
Set cnn = Nothing
Set cmd = Nothing
Set RS = Nothing
End Sub