选择变量中的语句

时间:2012-09-18 10:18:17

标签: database oracle plsql oracle10g

我有以下for循环

for i in (
select * from employees)

loop
--code
end loop;

是否可以在像

这样的变量中分配select语句
sql_stat := 'select * from employees';

和循环

for i in (
    sql_stat)
loop

当我尝试上述操作时,我收到了错误消息 “遇到符号循环”

如果我想在变量中分配select语句,那么执行此操作的正确方法是什么。

由于

2 个答案:

答案 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;