Comment appeler la procédure stockée Oracle qui renvoie curseur ref

Je suis en train d'appel de procédure stockée Oracle qui renvoie ref cursor, et j'ai besoin de générer une arborescence de que les données renvoyées. Je suis nouveau à cela et j'ai deux problèmes.

Premier problème est que je ne suis pas en mesure d'appeler cette procédure. J'obtiens cette erreur: "mauvais nombre ou les types d'arguments dans l'appel à "OBJECT_HIERARCHY'"

Et mon deuxième problème est que je ne comprends pas comment vais-je obtenir des données lorsque cette procédure retourne un curseur de référence de la valeur? Il y a plus de 5000 enregistrements dans la table et que je ne reçois pas les données, mais un ref cursor valeur. Quelqu'un peut-il expliquer comment puis-je obtenir des données avec le curseur de référence de la valeur. Je n'ai aucune expérience avec Oracle.

C'est la définition de la procédure dans 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;

ce sont les champs de la table définitions

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)

et c'est mon code qui renvoie l'erreur:

            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();
        }

Quelqu'un peut-il m'aider et m'expliquer pourquoi mon code de retour de cette erreur: "mauvais nombre ou les types d'arguments dans l'appel à "OBJECT_HIERARCHY'"

OriginalL'auteur user2718165 | 2013-10-10