refカーソルを返すOracleストアドプロシージャを呼び出そうとしています。返されたデータからツリービューを生成する必要があります。私はこれで新しく、私には2つの問題があります。refカーソルを返すOracleストアドプロシージャを呼び出す方法
最初の問題は、私がその手順を呼び出すことができないということです。私はこのエラーが発生しています: "OBJECT_HIERARCHY 'への呼び出しで間違った数または引数の型"
そして、私の2番目の問題は、このプロシージャがREFカーソル値を返すときに、 ?そのテーブルには5000レコード以上あり、そのデータは取得していませんが、REFカーソル値です。誰かがrefカーソル値でそのデータを取得する方法を説明してください。私はOracleの経験がありません。
これは、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;
は、これらは、テーブルのフィールド定義
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)
であり、これはエラーを返します私のコードです:
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();
}
ができる人私の手助けをしてください、なぜ私のコードがこのエラーを返すのかを私に説明してください: "間違った数または引数の型
は最後に、それが働きました。ありがとうございました。コードを修正するために私の最初の投稿を編集しました – user2718165
あなたの質問を読んでいて、何が間違っていたのか分からなかったので、あなたの投稿にその編集をロールバックしました。あなたが問題を抱えていたときのように質問を残してください。 – krillgar