declare
 
  v_sql        varchar2(500);
begin
  
for i in 1 .. 5 loop
    v_sql := 'update zhangrmTbs set updatecount =(select nvl(count(*),0) from HK_Trd_center where  uppdate=to_date(''2013-3-13'',''yyyy-mm-dd'') minus
 select nvl(count(*),0) from HK_Trd_center where  uppdate=to_date(''2013-3-13'',''yyyy-mm-dd'')+1 ) where updatecount is null and id=' || i;
   v_sql := replace(v_sql, '+1', '+' || i || '');
   for j in 1 .. 3  loop
   v_sql := replace(v_sql, '+1', '+' || j || '');
               dbms_output.put_line('j='||j);
        dbms_output.put_line(v_sql);
   
   end loop;
    dbms_output.put_line('-------------------------------------ok');
  
end loop;
 
end;
SQLselect

解决方案 »

  1.   

    --是能够赋值的
    declare  v_sql varchar2(500);begin
      
    for i in 1 .. 5 loop
        v_sql := '+1'||' id=' || i;
        
       v_sql := replace(v_sql, '+1', '+' || i || '');
       
       for j in 1 .. 3  loop
       v_sql := replace(v_sql, '+1', '+' || j || '');
                   dbms_output.put_line('j='||j);
            dbms_output.put_line('i='||i||'时的第' ||j ||'次输出');
       
       end loop;
        dbms_output.put_line('-------------------------------------ok');
    end loop; 
    end;--结果
    j=1
    i=1时的第1次输出
    j=2
    i=1时的第2次输出
    j=3
    i=1时的第3次输出
    -------------------------------------ok
    j=1
    i=2时的第1次输出
    j=2
    i=2时的第2次输出
    j=3
    i=2时的第3次输出
    -------------------------------------ok
    j=1
    i=3时的第1次输出
    j=2
    i=3时的第2次输出
    j=3
    i=3时的第3次输出
    -------------------------------------ok
    j=1
    i=4时的第1次输出
    j=2
    i=4时的第2次输出
    j=3
    i=4时的第3次输出
    -------------------------------------ok
    j=1
    i=5时的第1次输出
    j=2
    i=5时的第2次输出
    j=3
    i=5时的第3次输出
    -------------------------------------ok
      

  2.   

    双层的循环是有里及外的,这也就是说,必须等里面的循环执行结束后,再进行外面的结果
    declare
    begin
    for i in 1 .. 5 loop
     dbms_output.put_line(i||'行执行开始');
       for j in 1 .. 3  loop
     dbms_output.put_line('i='||i||','||'j='||j);
    END loop;
    dbms_output.put_line(i||'行执行结束');
    end loop; 
    end;
    下面的是执行结果
    1行执行开始
    i=1,j=1
    i=1,j=2
    i=1,j=3
    1行执行结束
    2行执行开始
    i=2,j=1
    i=2,j=2
    i=2,j=3
    2行执行结束
    3行执行开始
    i=3,j=1
    i=3,j=2
    i=3,j=3
    3行执行结束
    4行执行开始
    i=4,j=1
    i=4,j=2
    i=4,j=3
    4行执行结束
    5行执行开始
    i=5,j=1
    i=5,j=2
    i=5,j=3
    5行执行结束
    希望对楼主有用