我正在构建一个过程,我首先创建一个select语句并将其存储在VARCAHR变量中。 我现在想要执行该查询并将整个结果集存储在变量中以循环遍历它或直接在for循环中使用。 我只找到了在for循环定义中硬编写Select的示例。 如何将Select语句与保存select语句的变量交换?
for r IN (SELECT ... FROM ...)
loop
--do sth;
end loop;
我想如何使用它:
statement := 'SELECT .... FROM ...';
for r IN (statement) -- HOW TO DO THIS
loop
--do sth;
end loop;
答案 0 :(得分:2)
对于动态引用游标,您需要明确定义所有内容:
declare
sqlstring long := 'select 123 as id, ''demo'' as somevalue from dual where dummy = :b1';
resultset sys_refcursor;
type demo_rectype is record
( id integer
, somevalue varchar2(30) );
demorec demo_rectype;
begin
open resultset for sqlstring using 'X';
loop
fetch resultset into demorec;
exit when resultset%notfound;
dbms_output.put_line('id=' || demorec.id || ' somevalue=' || demorec.somevalue);
end loop;
close resultset;
end;
您可以解析游标并使用DBMS_SQL找出列名和数据类型。示例:www.williamrobertson.net/documents/refcursor-to-csv.shtml