Có lý do gì khiến bạn không sử dụng một hàm thay vì thủ tục không?
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;
Sau đó, trong C #, bạn phải thay đổi nó thành thế này:
cmd.Parameters.Add("resul", OracleDbType.RefCursor, ParameterDirection.ReturnValue);
Khi bạn chạy da.Fill(ds);
thì hàm được thực thi, tức là sử dụng cmd.ExecuteNonQuery();
thực thi chức năng hai lần.
Dù sao, đối với một thủ tục, cách phù hợp phải là cách sau:
cmd.CommandText = "ListadoClientes(:resul)";