我正在尝试将游标lrefcur_equip_work的列提取到另一个游标中。
lrefcur_equip_work := equipment_work_type_lib.get_equipment_type_list
(pn_equipment_type_id => lr_equipment_type.equipment_type_id);
这将返回列
中的数据EQUIPMENT_TYPE_ID WORK_TYPE_ID
WORK_TYPE_ID列是表WORK_TYPES的主键。
我需要一个WORK_TYPES记录的refcursor,使用从我原来的refcursor中提取的主键WORK_TYPE_ID获取。
使用伪代码(不起作用),这实际上是我试图做的事情:
lrefcur_equip_work SYS_REFCURSOR;
lrefcur_new SYS_REFCURSOR;
BEGIN
lrefcur_equip_work := equipment_work_type_lib.get_equipment_type_list(pn_equipment_type_id => lr_equipment_type.equipment_type_id);
LOOP
FETCH lrefcur_equip_work INTO equip_work_record
OPEN lrefcur_new FOR
SELECT * from work_types where work_type_id = equip_work_record.work_type_id;
当然,这只能检索一条记录,因为我非常确定反馈者不会像这样动态地工作。是否有另一种方法来构建第二个refcursor?
答案 0 :(得分:0)
你无法“获取”游标,它在Oracle中没有任何意义。
你可以做这样的事情,但这不是一个很好的设计:
DECLARE
lrefcur_equip_work SYS_REFCURSOR;
lrefcur_new SYS_REFCURSOR;
work_types_rec work_type%rowtype;
BEGIN
lrefcur_equip_work := equipment_work_type_lib.get_equipment_type_list
(pn_equipment_type_id => lr_equipment_type.equipment_type_id);
LOOP
FETCH lrefcur_equip_work INTO equip_work_record
OPEN lrefcur_new FOR
SELECT *
into work_types_rec
from work_types where work_type_id = equip_work_record.work_type_id;
DBMS_OUTPUT.PUT_LINE (work_types_rec.work_type_id);
您是否被迫使用equipment_work_type_lib.get_equipment_type_list
构建,或者您可以编写更有用的内容吗?类似的东西:
DECLARE
lrefcur_new SYS_REFCURSOR;
BEGIN
OPEN lrefcur_new FOR
SELECT *
from work_types where work_type_id IN
(/* Whatever query you are running in equipment_work_type_lib.get_equipment_type_list */)
END;
或者您可以更改函数以返回表TYPE:
create type t_equip_list_tab is table of number;
function get_equipment_type_list (...)
return t_equip_list_tab;
然后:
DECLARE
lrefcur_new SYS_REFCURSOR;
BEGIN
OPEN lrefcur_new FOR
SELECT *
from work_types where work_type_id IN
TABLE (equipment_work_type_lib.get_equipment_type_list
(pn_equipment_type_id => lr_equipment_type.equipment_type_id)
);