【问题标题】:PL/SQL-Cursor: iterate with FOR and IN [duplicate]PL/SQL-Cursor:使用 FOR 和 IN 进行迭代 [重复]
【发布时间】:2020-10-20 23:27:42
【问题描述】:

我尝试通过光标进行迭代。它的语句是动态创建的。

如果我通过 LOOP 和 FETCH 这样做,一切都很好。 如果我尝试通过 FOR 和 IN 执行此操作,则语法错误('CUR' 不是过程或未定义)

我怎样才能用 FOR 和 IN 做到这一点?

DECLARE
FUNCTION foo (pat VARCHAR) RETURN NUMBER IS
    sqlcmd VARCHAR (100);
    TYPE t_refcur IS REF CURSOR;
        cur t_refcur;
    str VARCHAR (200);
BEGIN
    sqlcmd := 'SELECT name FROM my_tab WHERE name LIKE :1';

    -- 1st loop ok
    OPEN cur FOR sqlcmd USING pat;
    LOOP
        FETCH cur INTO str;
        EXIT WHEN cur%NOTFOUND;
        dbms_output.put_line('C1  '|| str);
    END LOOP;
    CLOSE cur;

    -- 2nd loop with syntax error (no procedure or CUR not known)
    OPEN cur FOR sqlcmd USING pat;
    FOR str IN cur LOOP
        dbms_output.put_line('C2  '|| str);
    END LOOP;
    CLOSE cur;

    RETURN 1;
END foo;

BEGIN
    dbms_output.put_line (foo ('A%'));
END;

【问题讨论】:

    标签: oracle plsql dynamic-sql


    【解决方案1】:

    不幸的是,它不能用于带有引用光标的 for in 循环,因为 for in 循环需要在编译时定义列列表。例如

    begin
        for i in (select dummy, sysdate dt from dual) loop
           dbms_output.put_line(i.dummy || ': ' || i.dt);
        end loop;
    end;
    /
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-28
      • 2021-11-29
      • 2015-06-19
      • 2021-07-30
      相关资源
      最近更新 更多