create or replace procedure name_pro(p_id in varchar2)
as
cursor t_sor(v_id varchar2) is
select * from table_name where id=v_id;
begin
for v_sor in t_sor loop
...
end loop;
end;
/

解决方案 »

  1.   

    用动态游标。
    open 游标变量 for 查询语句
      

  2.   

    SQL> select * from tb01;COL01
    -------------------
    2003-03-05 15:32:39
    2003-03-04 15:32:47
    2003-03-03 15:32:53
    2003-03-07 15:33:01
    2003-03-06 15:33:06
    2003-03-08 15:33:11已选择6行。
    SQL> create  or  replace  procedure  name_pro(p_id  in  date)
      2  as  
      3  d_sor date;
      4  cursor  t_sor(p_id  date)  is  
      5  select  *  from  tb01 where  col01<p_id;  
      6  begin  
      7  for  v_sor  in  t_sor(p_id)  loop  
      8  DBMS_OUTPUT.PUT_LINE('ok');
      9  end  loop;
     10  end;  
     11  / 过程已创建。SQL> set serveroutput on
    SQL> exec name_pro(sysdate);
    ok
    ok
    ok
    okPL/SQL 过程已成功完成。
      

  3.   

    sorry,笔误for v_sor in t_sor(p_id) loop
    ...
      

  4.   

    我是想在BEGIN.....END中间定义一个游标,该如何实现?
      

  5.   

    ......open cur1 for 'select '||field_name||' from '||table_name||' order by '|| field_name;
      loop
        fetch cur1 into val;
        EXIT WHEN cur1%NOTFOUND;
        if mod(i,spliting_range)=0 then
           insert into dt_spliting_table values(val);
        end if;
        i:=i+1;
        last_val:=val;
      end loop;
      close cur1;