【发布时间】: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