内部游标如何在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中使用外部游标的字段?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle游标使用总结

Oracle下如何用sql创建游标

oracle 存储过程执行动态SQL 返回结果给游标,外部程序获得dataset结果集。

oracle过程中游标作为输入参数 求解。。。

Oracle PL/SQL 引用游标如何

Oracle 11g:在过程中使用游标