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