Tôi đang cố gắng gọi thủ tục lưu sẵn Oracle trả về con trỏ ref và tôi cần tạo chế độ xem dạng cây từ dữ liệu được trả về đó. Tôi mới ở đây và tôi có hai vấn đề.Cách gọi thủ tục lưu sẵn Oracle trả về con trỏ ref
Vấn đề đầu tiên là tôi không thể gọi thủ tục đó. Tôi nhận được lỗi này: "sai số hoặc loại đối số trong cuộc gọi đến" OBJECT_HIERARCHY '"
Và vấn đề thứ hai của tôi là tôi không hiểu làm thế nào tôi sẽ nhận được dữ liệu đó khi thủ tục này trả về giá trị con trỏ ref ? Có hơn 5000 bản ghi trong bảng đó và tôi không nhận được dữ liệu đó, mà là giá trị con trỏ ref. Ai đó có thể vui lòng giải thích làm thế nào tôi có thể nhận được dữ liệu với giá trị con trỏ ref. Tôi không có kinh nghiệm với Oracle.
Đây là định nghĩa thủ tục trong 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;
đây là những định nghĩa lĩnh vực bảng
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)
và đây là mã của tôi mà trả về lỗi:
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();
}
Có thể ai đó hãy giúp tôi và giải thích cho tôi tại sao mã của tôi trả lại lỗi này: "số sai hoặc các loại đối số trong hãy gọi tới 'OBJECT_HIERARCHY' "
Cuối cùng, nó làm việc. Cảm ơn bạn. Tôi đã chỉnh sửa bài đăng đầu tiên của mình để sửa mã số – user2718165
Tôi đã khôi phục bản chỉnh sửa đó cho bài đăng của bạn, khi tôi đọc qua câu hỏi của bạn và không thể tìm ra điều gì sai. Để lại câu hỏi như khi bạn gặp vấn đề. – krillgar