Bạn có thực sự cần con trỏ rõ ràng không? Nếu bạn cần lặp qua SQL động, thì bạn có thể sử dụng FOR IN EXECUTE
. Nó là vòng lặp qua con trỏ ngầm (nội bộ) cho SQL động
FOR db_rec IN EXECUTE v_sql_dynamic
LOOP
..
END LOOP
Giải pháp phức tạp hơn một chút được mô tả trong tài liệu
- OPEN FOR EXECUTE
:
do $$
declare r refcursor; rec record;
begin
open r for execute 'select * from pg_class';
fetch next from r into rec;
while found
loop
raise notice '%', rec;
fetch next from r into rec;
end loop;
close r;
end $$;
Với loại con trỏ này, bạn không thể sử dụng FOR IN