Llamar función oracle desde C#

Hace algún tiempo necesite llamar una función oracle desde C# y me di cuenta que no hay demasiada información sobre este tema, y la información que hay esta en inglés.

Como es sabido, oracle permite crear procedimientos y funciones para realizar distintas tareas, por ejemplo: devolver una consulta, realizar cálculos en base de datos, realizar inserciones, entre otros. Algunas de estas tareas son comunes en el desarrollo de software, y es necesario tener información al respecto en español.

Es por eso que en esta entrada compartiré como llamar una función oracle desde C#.

Iniciamos creando un una función almacenada, en este caso vamos a suponer que esta dentro de un paquete oracle PKG_TEST

FUNCTION OBTENERTOTALEMPLEADOSDEP(DEP_ID_IN IN NUMBER) RETURN NUMBER 
    AS
    TOTALEMP NUMBER;
    BEGIN
    
        SELECT COUNT(EMP.ID) INTO TOTALEMP
        FROM EMPLEADOS EMP
        WHERE EMP.DEP_ID = DEP_ID_IN;
        RETURN TOTALEMP;

END OBTENERTOTALEMPLEADOSDEP;  

Una vez creada la función procedemos a codificar en C# la llamada a la función, de la siguiente manera

public static int ObtenerTotalEmpleados(int depid)
{
            int resultado = 0;

            OracleConnection con = getConexion();
            con.Open();
            Console.WriteLine("Connected to Oracle " + con.ServerVersion);

            OracleCommand cmd = con.CreateCommand();

            cmd.CommandText = "PKG_TEST.OBTENERTOTALEMPLEADOSDEP";
            cmd.CommandType = CommandType.StoredProcedure;

            OracleParameter par;
            par = new OracleParameter();
            par.ParameterName = "DEP_ID_IN";
            par.OracleDbType = OracleDbType.Int32;
            par.Value = depid;
            cmd.Parameters.Add(par);

            par = new OracleParameter();
            par.ParameterName = "TOTALEMP";
            par.OracleDbType = OracleDbType.Int32;
            par.Direction = ParameterDirection.ReturnValue;
            cmd.Parameters.Add(par);

            cmd.BindByName = true;

            cmd.ExecuteNonQuery();

            int aux = Convert.ToInt32(cmd.Parameters["TOTALEMP"].Value.ToString());

            if (!aux.Equals(0))
            {
                resultado = aux;
            }

            // Close and Dispose OracleConnection
            con.Close();
            con.Dispose();

            return resultado;
}

Las partes a tener en cuenta son:

cmd.CommandText = "PKG_TEST.OBTENERTOTALEMPLEADOSDEP"; //Nombre de la funcion que vamos a ejecutar
cmd.CommandType = CommandType.StoredProcedure; //Tipo de comando a ejecutar aquí se coloca storedprocedure, ya que funciona de la misma manera que un procedimiento almacenado

par.Direction = ParameterDirection.ReturnValue; //Parámetro de dirección, se debe colocar en ReturnValue ya que toda función retorna un valor.

cmd.BindByName = true; //Colocamos bindbyname para que reconozca el valor retornado por nombre

cmd.ExecuteNonQuery(); //Ejecutamos la llamada a la función

Para mas información de la como trabajar con el cliente de oracle para .NET se puede revisar el siguiente link oficial de oracle:

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/odpnt/

Entradas creadas 12

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Publicaciones relacionadas

Comienza escribiendo tu búsqueda y pulsa enter para buscar. Presiona ESC para cancelar.

Volver arriba