Estoy trabajando con Oracle EX y Visual Basic .NET.
Tengo en Oracle varios packages con funciones que devuelven un cursor y no se que estoy haciendo mal, pero me da error.
En procedimientos como variable de salida un cursor si me funciona, pero en función no.
Os pongo un ejemplo tonto del código que estoy utilizado sin funciones ni nada, que sino es un poco extenso.
Muchas gracias
Package Oracle
Código:
Código VB .NETcreate or replace PACKAGE P_CLIENTES AS type empcur is ref cursor; FUNCTION f_mostrar_clientes RETURN empcur; END P_CLIENTES; FUNCTION f_mostrar_clientes RETURN empcur AS pcursor empcur; BEGIN open pcursor for select * from clientes; return pcursor; END f_mostrar_clientes;
Código:
Private Sub funcion() ' Creo la conexión Oraclecon.Open() myCMD = New OracleCommand myCMD.Connection = Oraclecon Dim Ds As New DataSet ' Llamada al procedimiento Dim OracleParameter1 As Oracle.DataAccess.Client.OracleParameter = New Oracle.DataAccess.Client.OracleParameter myCMD.CommandText = "p_clientes.f_mostrar_clientes" myCMD.CommandType = CommandType.StoredProcedure 'Paso los parámetros al la función/procedimiento de dos formas ' 1) ' Si lo llamo de estar forma, al ejecutar me dice: ' parameter 'RETURN_VALUE': OracleType.Cursor parameters may only be ParameterDirection.Output parameters myCMD.Parameters.Add(New OracleParameter("RETURN_VALUE", OracleType.Cursor)).Direction = ParameterDirection.ReturnValue ' o 2) ' Y si lo llamo de esta otra: ' ORA-06550: línea 1, columna 35: ' PLS-00382: el tipo de expresión no es correcto ' ORA-06550: línea 1, columna 7: ' PL/SQL: Statment ignored myCMD.Parameters.Add(New OracleParameter("RETURN_VALUE", Oracle.DataAccess.Client.OracleDbType.RefCursor)).Direction = ParameterDirection.ReturnValue Dim MyDA As New OracleDataAdapter(myCMD) Try MyDA.Fill(Ds) Catch myex As Exception MsgBox(myex.Message) cerrar() End Try DataGrid1.DataSource = Ds.Tables(0) cerrar() End Sub