Czy istnieje powód, dla którego nie używasz funkcji zamiast procedury?
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;
Następnie w C# musisz to zmienić na to:
cmd.Parameters.Add("resul", OracleDbType.RefCursor, ParameterDirection.ReturnValue);
Po uruchomieniu da.Fill(ds);
następnie funkcja jest wykonywana, tj. za pomocą cmd.ExecuteNonQuery();
wykonuje funkcję dwukrotnie.
W każdym razie dla procedury właściwy sposób powinien być następujący:
cmd.CommandText = "ListadoClientes(:resul)";