Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Geben Sie sys_refcursor des Orakels an c# zurück

Gibt es einen Grund, warum Sie keine Funktion anstelle einer Prozedur verwenden?

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;

Dann müssen Sie es in C# wie folgt ändern:

cmd.Parameters.Add("resul", OracleDbType.RefCursor, ParameterDirection.ReturnValue);

Wenn Sie da.Fill(ds); ausführen dann wird die Funktion ausgeführt, also mit cmd.ExecuteNonQuery(); führt die Funktion zweimal aus.

Wie auch immer, für eine Prozedur sollte der richtige Weg dieser sein:

cmd.CommandText = "ListadoClientes(:resul)";