Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Retorne sys_refcursor do oráculo para c#


Existe uma razão pela qual você não usa uma função em vez de um procedimento?
CREATE OR REPLACE FUNCTION ListadoClientes() RETURN sys_refcursor
IS 
resul Sys_refcursor;
BEGIN 
  OPEN resul for select ID ,NOMBRES ,APELLIDOS ,CEDULA ,DIRECCION ,TELEFONO  
  from cliente; 
  RETURN resul;
END ListadoClientes;

Então, em C #, você deve alterá-lo para isso:
cmd.Parameters.Add("resul", OracleDbType.RefCursor, ParameterDirection.ReturnValue);

Quando você executa da.Fill(ds); então a função é executada, ou seja, usando cmd.ExecuteNonQuery(); executa a função duas vezes.

Enfim, para um procedimento o caminho certo deve ser este:
cmd.CommandText = "ListadoClientes(:resul)";