v_upd_cur := 'Select m.name, m.age'|| ' From ' || act_table || ' m Where m.age < 30';
这是游标中的动态SQL select语句。如何在名为cur
?
我尝试过类似下面的代码无法正常工作,有人有更好的建议吗?
Cursor cur IS v_upd_cur;
答案 0 :(得分:2)
您可以使用sys_refcursor尝试此操作。请查看以下示例
DECLARE
my_cursor SYS_REFCURSOR;
v_name VARCHAR2 (100);
v_string VARCHAR2 (1000) := 'SELECT ename
FROM emp';
BEGIN
OPEN my_cursor FOR v_string;
LOOP
FETCH my_cursor INTO v_name;
DBMS_OUTPUT.put_line (v_name);
EXIT WHEN my_cursor%NOTFOUND;
END LOOP;
CLOSE my_cursor;
END;
答案 1 :(得分:0)
您可以用同样的方式打开静态或动态引用:
declare
rc sys_refcursor;
begin
open rc for select * from dual;
end;
declare
rc sys_refcursor;
begin
open rc for 'select * from dual';
end;
然后你只需要把它提取到一个合适的记录中。
在 21c 中,这有所简化。假设 employee_rectype
是与 sql_text
中员工的动态游标匹配的记录类型:
for r employee_rectype in values of (
execute immediate sql_text
)
loop
dbms_output.put_line(r.firstname || ', ' || r.lastname);
end loop;