2
DB:甲骨文11gR2的一個父SYS_REFCURSOR記錄包含多個記錄孩子SYS_REFCURSOR類型
你好,
我有2個表和他們之間的父子關係(一到多)。現在我需要從一個存儲過程返回一個ref-cursor,它將從父表中返回一行,對應於輸入參數和子表中相應的記錄(可以是數組)。請注意,我們不希望重複父級的結果集。所以基本上我們只想返回一個記錄,其中detail列是一個記錄數組或一個父系統recursor內的子系統refcursor。問題是我該怎麼做?
下面是示例表,數據和通常的程序(返回多行 - 這不旨在):
create table parent
(
class_id varchar2(2),
class_name varchar2(10),
subject_name varchar2(10),
constraint pk_id primary key (class_id)
);
create table child
(
class_id varchar2(10),
student_name varchar2(10),
result varchar2(10),
constraint fk_id Foreign key (class_id) references parent(class_id)
);
insert into parent values('1', 'class_1', 'subject_1');
insert into parent values('2', 'class_2', 'subject_2');
insert into parent values('3', 'class_3', 'subject_3');
insert into parent values('4', 'class_4', 'subject_4');
insert into child values ('1', 'student_1', 'pass');
insert into child values ('1', 'student_2', 'fail');
insert into child values ('1', 'student_3', 'pass');
insert into child values ('2', 'student_1', 'pass');
insert into child values ('2', 'student_4', 'fail');
create or replace PROCEDURE get_data (
class_id_in IN parent.class_id%TYPE,
student_list_cur OUT SYS_REFCURSOR)
AS
BEGIN
OPEN student_list_cur FOR
SELECT p.class_name,
p.subject_name,
c.student_name,
c.result
FROM parent p, child c
WHERE p.class_id = c.class_id
AND p.class_id = class_id_in;
END get_data;
再次注意,SYS-REFCURSOR回報:
class_name subject_name student_name result
-------------------------------------------------------
class_1 subject_1 student_1 pass
class_1 subject_1 student_2 fail
class_1 subject_1 student_3 pass
相反我想要的是一條記錄,如:
parent.class_name,
parent.subject_name,
child.array_of_records SYS_REFCURSOR
其中child.array_of_records包含mul child.student_name,child.result的記錄對應於相同的class_id。
謝謝。
感謝Masheswaran,它的工作原理。然而,這種方法的一個問題(我被告知)是,一個父母可以打開多個孩子游標,因此可能會導致一些問題。我想知道是否可以使用嵌套表/數組來傳遞父級sys_refcursor內的子記錄。你能否說出一些看法。 – user1804548 2015-02-11 20:49:35