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
Vous devez vous connecter pour publier un commentaire.
Si vous allez à fournir les
OUT
, vous aurez besoin de fournirnParentId
ainsi parce que .NET ne va pas le nom de ces paramètres lorsque la déclaration est envoyée au serveur.J'ai roulé en arrière que les modifier à votre post, comme j'ai de la lecture à travers votre question et ne pouvait pas comprendre ce qui n'allait pas. Laisser la question comme il était quand vous avez eu un problème.
OriginalL'auteur Mike Perrenoud
Exemple:
OriginalL'auteur Ankit Jain