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'"