内部游标如何在oracle中使用外部游标的字段?
Posted
技术标签:
【中文标题】内部游标如何在oracle中使用外部游标的字段?【英文标题】:how inner cursor use a field of outer cursor in oracle? 【发布时间】:2013-12-06 08:09:21 【问题描述】:我有两个嵌套游标。我的意思是一个光标在另一个光标之内。
我想在内部光标中使用外部光标字段。像这样:
Inner_cursor.outer_cursor.outer_cursor_column;
但即使我这样使用它也不起作用:
Inner_cursor.(outer_cursor.outer_cursor_column);
有什么办法可以做到吗?
编辑:
这是我的代码:
CREATE OR REPLACE PROCEDURE TEST1
AS
CURSOR loop_relation IS
SELECT * FROM RELATION_table;
relation_rec loop_relation%rowtype;
CURSOR loop_BIG_TABLE IS
SELECT * FROM BIG_TABLE;
BIG_TABLE_rec loop_BIG_TABLE%rowtype;
BEGIN
FOR RELATION_REC IN LOOP_RELATION
LOOP
FOR BIG_TABLE_rec in loop_BIG_TABLE
LOOP
IF (BIG_TABLE_REC.RELATION_REC.DESTINATION_PK IS NULL) THEN
UPDATE BIG_TABLE
SET BIG_TABLE.RELATION_REC.DESTINATION_PK = (
SELECT RELATION_REC.SOURCE_FK FROM RELATION_REC.SOURCE_TABLE
WHERE RELATION_REC.SOURCE_PK = BIG_TABLE_REC.RELATION_REC.SOURCE_PK)
WHERE BIG_TABLE_REC.ID = BIG_TABLE.ID;
END IF;
END LOOP;
END LOOP;
END TEST1;
/
我的问题在于我使用三个点(。)在内部光标中使用外部光标的值。
【问题讨论】:
您可能必须使用动态 SQL 并连接外部游标值。 贴出你的代码,你试过什么? 【参考方案1】:下面是两个嵌套游标和变量的示例,它们来自外部用于内部的游标。希望对你有帮助。
BEGIN
FOR r_outer in (
select tab1.field1
from table1 tab1 )
LOOP
FOR r_inner in (
select tab2.field2
from table2 tab2
where tab2.field2 = r_outer.field1 )
LOOP
dbms_output.put_line(r_outer.field1);
dbms_output.put_line(r_inner.field2);
END LOOP;
END LOOP;
END;
【讨论】:
【参考方案2】:作为参考,我创建了一个过程来显示如何在内部光标值中使用外部光标值。我希望这能解决您的疑问。
CREATE OR REPLACE PROCEDURE cur_inside_cur(my_cur OUT sys_refcursor)
AS
CURSOR roy_cur IS
SELECT name FROM avrajit;
roy_cur1 roy_cur%ROWTYPE;
BEGIN
OPEN roy_cur;
LOOP
FETCH roy_cur INTO roy_cur1;
EXIT WHEN roy_cur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(roy_cur1.name);
OPEN my_cur FOR
SELECT department FROM avrajit
WHERE name=roy_cur1.name;
END LOOP;
END cur_inside_cur;
输出
var c refcursor;
begin
cur_inside_cur(:c);
end;
print c;
【讨论】:
以上是关于内部游标如何在oracle中使用外部游标的字段?的主要内容,如果未能解决你的问题,请参考以下文章