Cómo llamar al procedimiento almacenado de Oracle que devuelve el cursor de referencia

Estoy tratando de llamar al procedimiento almacenado de Oracle que devuelve el cursor de referencia, y necesito generar una vista de árbol a partir de los datos devueltos. Soy nuevo en esto y tengo dos problemas.

El primer problema es que no puedo llamar a ese procedimiento. Recibo este error: "número incorrecto o tipos de argumentos en la llamada a 'OBJECT_HIERARCHY'"

Y mi segundo problema es que no entiendo cómo obtendré esos datos cuando este procedimiento devuelva un valor de cursor de referencia. Hay más de 5000 registros en esa tabla y no obtengo esos datos, sino un valor de cursor de referencia. ¿Alguien puede explicar cómo puedo obtener esos datos con el valor del cursor de referencia? No tengo experiencia con Oracle.

Esta es la definición del procedimiento en oracle:

CREATE OR REPLACE PROCEDURE SAD.object_hierarchy  
(nAppId IN NUMBER,
nParentId IN NUMBER DEFAULT -1, 
o_cRefCursor OUT SYS_REFCURSOR)
IS
BEGIN
IF NOT o_cRefCursor%ISOPEN THEN

  OPEN o_cRefCursor FOR 
     SELECT
        h.PARENT_ID, h.CHILD_ID, h.H_LEVEL,
        o.OBJECT_IDENTIFIER, o.OBJECT_TYPE_ID
     FROM
     (
        SELECT
           PARENT_ID, CHILD_ID, LEVEL AS H_LEVEL
        FROM OBJECT_RELATIONSHIPS
        START WITH PARENT_ID = nParentId --> -1 --= 60170
        CONNECT BY PRIOR CHILD_ID = PARENT_ID
     ) h
     INNER JOIN
        OBJECTS o
        ON
           o.OBJECT_ID = h.CHILD_ID AND
           O.APPLICATION_ID = nAppId;   
 END IF;
END object_hierarchy;

Estas son las definiciones de los campos de la tabla.

Column Name               Data Type            

 OBJECT_REL_ID            NUMBER (14)                    
 PARENT_ID                NUMBER (14)                    
 CHILD_ID                 NUMBER (14)                    
 OBJECT_IDENTIFIER        VARCHAR2 (255 Byte)    
 OBJECT_TYPE_ID           VARCHAR2 (5 Byte)

y este es mi código que devuelve error:

            string oradb = "Data Source=(DESCRIPTION="
         + "(ADDRESS=(PROTOCOL=TCP)(HOST=tnt33)(PORT=1521))"
         + "(CONNECT_DATA=(SERVICE_NAME=ORCL)));"
         + "User Id=xxx;Password=xxxxx;";
        OracleConnection con = new OracleConnection(oradb);

        try
        {
            con.Open();
            OracleCommand cmd = new OracleCommand();
            cmd.Connection = con;
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.CommandText = "SAD.object_hierarchy";
            cmd.Parameters.Add("nAppId", OracleDbType.Int16).Value = 1;
            OracleParameter oraP = new OracleParameter();
            oraP.OracleDbType = OracleDbType.RefCursor;
            oraP.Direction = System.Data.ParameterDirection.Output;
            cmd.Parameters.Add(oraP);
            OracleDataReader reader = cmd.ExecuteReader();

            while (reader.Read())
            {

            }
            reader.Close();    
        }
        catch (Exception ex)
        {

            con.Close();
        }

¿Puede alguien ayudarme y explicarme por qué mi código está devolviendo este error: "número o tipo de argumentos incorrectos en la llamada a 'OBJECT_HIERARCHY'"

Respuestas a la pregunta(2)

Su respuesta a la pregunta