我有以下for循环
for i in (
select * from employees)
loop
--code
end loop;
是否可以在像
这样的变量中分配select语句sql_stat := 'select * from employees';
和循环
for i in (
sql_stat)
loop
当我尝试上述操作时,我收到了错误消息 “遇到符号循环”
如果我想在变量中分配select语句,那么执行此操作的正确方法是什么。
由于
答案 0 :(得分:4)
您可以使用ref cursors
来获得所需的结果。这是一个例子。
declare
type t_cursor is ref cursor;
c_cursor t_cursor;
l_sql varchar2(123);
l_var number;
begin
l_sql := 'select count(*) from T1'; -- your query goes here
open c_cursor for l_sql;
loop
fetch c_cursor
into l_var;-- variable(s) of appropriate datatype you want to fetch data into
exit When c_cursor%notfound;
-- any work for processing fetched data goes here
end loop;
end;
答案 1 :(得分:0)
为什么要将select语句存储在变量中?只有当查询的一部分是可变的时,才会这样做。例如table_name。
通常查询是静态的,访问行的查询行结果的常规方法是使用游标进行循环,如下所示:
declare
cursor c is
select column1,column2
from table;
begin
for r in c loop
dbms_output.put_line(r.column1||' '||r.column2);
end loop;
end;