declare 
  i number;
  cursor v_cursor is select * from tablename(可以是一个变量);
begin
  for v_cursor in v_tempcursor loop
    i := v_tempcursor.id;
    .....
    ...
  end loop;
end;
其中的变量v_tempcursor不用声明的.

解决方案 »

  1.   

    sorry写错了:
    declare 
      i number;
      cursor v_cursor is select * from tablename(可以是一个变量);
    begin
      for v_tempcursor in v_cursor loop
        i := v_tempcursor.id;
        .....
        ...
      end loop;
    end;
    其中的变量v_tempcursor不用声明的.^_^
      

  2.   

    for 循环的循环变量是隐含定义,而且类型就是游标的行类型
      

  3.   

    先从col表中取出字段名称,
    select cname into t_cname from col where tname='tablename' and colno=1;
    /注意要colno循环取出
    然后用动态sql实现
      

  4.   

    这样还是不行,因为into后面必须明确列出变量或者记录。我看PL/SQL说明书上说fetch不支持这种用法。算了,我另想办法吧。
      

  5.   

    这是取字段名称的语句,循环取出后放在一个字符串中str:=str||','||t_cname;
    然后用动态sql
    select str from ...;
    这样不能满足要求吗?
      

  6.   

    我刚刚弄过这个问题,你试试下面的东西应该可以的.
    declare
    临时表(table_a) is table of 表名(table)%rowtype
       index by binary_integer;
    表变量(table_a_1)  临时表(table_a) ;
    cursor 游标名(cur_a)is select * from 表名(table) where     条件……;
      游标变量(a_cur)  游标名(cur_a);
      索引(t_index)  number;
    begin
    open cur_a;
       loop
        fetch cur_a into table_a_a(t_index);
        exit when cur_a%notfound;
      t_index:=t_index+1;
           end loop;   
       close cur_a;
    end;
      

  7.   

    我怎么定义这个临时表呀?表名是动态的。
    我试过了,除非存在一种按列一个一个取的方法,否则无法解决俺的问题。
    对游标的fetch都是一次性取到整个行,这样无济于事。
    我决定在这个问题上抛弃pl/SQL,改用oci解决。
    多谢各位啦!