PLSQL學習-【3迴圈結構】

哎呀我的天吶發表於2014-11-19

分批提交例子:

 declare
  cursor cu_emp is select * from emp1;
 begin
 for v_cu in cu_emp loop
      if v_cu.ename = \'haha\' then
       delete from emp where empno=v_cu.empno;
      end if;
      if mod(cu_emp%rowcount,1000)=0 then
         dbms_output.put_line(cu_emp%rowcount);
         commit;
      end if;
 end loop;
 -- commit;
 end;
 /
PL/SQL procedure successfully completed.


CLERK部門的員工,津貼變成200:

10:32:59 SQL> declare
10:33:11   2  cursor cu_emp is select * from emp;
10:33:23   3 begin
10:33:24   4      for i in cu_emp loop
10:33:35   5       if i.job='CLERK' then
10:33:51   6          update emp set comm = 200 where empno = i.empno;
10:34:11   7       end if;
10:34:19   8      end loop;
10:34:24   9      --commit;
10:34:30  10 end;
10:34:32  11 /


declare 
   cursor cu_emp is select * from emp;
begin
   for i in cu_emp loop
     if i.job = 'CLERK' then 
       update emp set comm = 200 where empno = i.empno;
     elsif i.job = 'SALESMAN' then                --日語錢包:saiif  發音很像
       update emp set comm = 1000 where empno = i.empno;
     end if;
    end loop;
end;
 /

第一次執行時間102s:

第二次執行耗時很短:



三種迴圈:
    
 loop:

declare 
  i number;
begin 
    i:=1;
    loop
      insert into emp(empno,ename) values(i,'YAO' || i);
      i:=i+1;
      exit when i > 2000;
    end loop;
   commit;
end;


while:

declare 
  i number;
begin 
    i:=3000;
    while i<=6000 loop
      insert into emp(empno,ename) values(i,\'YAO\' || i);
      i:=i+1;
    end loop;
   commit;
end;


for迴圈:

declare
 begin
   for i in 8004..9999 loop
     insert into emp(empno,ename) values (i,'LOU');
   end loop;
 commit;
 end;
/

迴圈巢狀:
    列印9 9 乘法表

   

12:59:19 SQL> declare 
12:59:26   2      begin
12:59:29   3      for i in 1..9 loop
12:59:38   4       for j in 1..9 loop
12:59:54   5          dbms_output.put_line(i||'*'||j ||'='||i*j);
13:01:33   6       end loop;
13:01:42   7      end loop;
13:01:46   8 end;
13:01:49   9 /
set serveroutput on




迴圈退出:

declare
begin
  <>                 --標籤
  for i in 1..9 loop
    <>
    for j in 1..9 loop
      exit outer when j > 5;
      dbms_output.put_line(i||'*'||j||'='||i*j);
    end loop;
  end loop;
end;

直接調到外層:

declare

begin
  <>
  for i in 1..9 loop
    <>
    for j in 1..9 loop
      exit outer when j > 5;
      dbms_output.put_line(i||\'*\'||j||\'=\'||i*j);
    end loop;
  end loop;
end;
1*1=1
1*2=2
1*3=3
1*4=4
1*5=5




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29990276/viewspace-1339263/,如需轉載,請註明出處,否則將追究法律責任。

相關文章