Aufrufen einer gespeicherten Oracle-Prozedur, die den Referenzcursor zurückgibt

Ich versuche, die gespeicherte Oracle-Prozedur aufzurufen, die den Ref-Cursor zurückgibt, und ich muss aus diesen zurückgegebenen Daten eine Baumansicht generieren. Ich bin neu in diesem Bereich und ich habe zwei Probleme.

Das erste Problem ist, dass ich diese Prozedur nicht aufrufen kann. Ich erhalte den folgenden Fehler: "Falsche Anzahl oder Arten von Argumenten beim Aufruf von 'OBJECT_HIERARCHY'"

Und mein zweites Problem ist, dass ich nicht verstehe, wie ich diese Daten erhalten soll, wenn diese Prozedur einen Ref-Cursor-Wert zurückgibt? Es gibt mehr als 5000 Datensätze in dieser Tabelle und ich erhalte nicht diese Daten, aber einen Ref-Cursor-Wert. Kann jemand bitte erklären, wie ich diese Daten mit Hinweiscursorwert erhalten kann. Ich habe keine Erfahrung mit Oracle.

Dies ist die Prozedurdefinition in 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;

Dies sind die Tabellenfelddefinitionen

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)

und das ist mein Code, der Fehler zurückgibt:

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

Kann mir bitte jemand helfen und mir erklären, warum mein Code diesen Fehler zurückgibt: "Falsche Anzahl oder Arten von Argumenten beim Aufruf von 'OBJECT_HIERARCHY'"

Antworten auf die Frage(2)

Ihre Antwort auf die Frage