1. 程式人生 > >oracle 學習之:for迴圈中包涵select語句

oracle 學習之:for迴圈中包涵select語句

      oracle中的for迴圈用法比較簡單,但是在一次用到包涵select語句的for迴圈時,還是發現了一些自己以前沒有注意的東西。       我的程式碼如下: declare val1 date;
val2 date;
begin
   for i in (select empno from emp_s) loop
    select hiredate into val1 from (select empno,hiredate,rank()over(order by hiredate) a from emp_s where empno=i) where a=1;
    select hiredate into val2 from (select empno,hiredate,rank()over(order by hiredate) a from emp_s where empno=i) where a=2;
     dbms_output.put_line(val2-val1);
  end loop;
exception
  when others then
    dbms_output.put_line(sqlerrm);
end; 編譯的時候發現丟擲兩處PLS-00382錯誤。修改後編譯通過!(修改處用紅字標明!) declare val1 date;
val2 date;
begin
  for i in (select empno from emp_s) loop
    select hiredate into val1 from (select empno,hiredate,rank()over(order by hiredate) a from emp_s where empno=i.empno
) where a=1;
    select hiredate into val2 from (select empno,hiredate,rank()over(order by hiredate) a from emp_s where empno=i.empno) where a=2;
     dbms_output.put_line(val2-val1);
  end loop;
exception
  when others then
    dbms_output.put_line(sqlerrm);
end;      從上面的兩個例子裡面我們可以很明顯的看出來,在包涵select語句的for迴圈中,變數i是被當做表型別來處理的(即使你的select語句中只取了一列資料)。所以當我們把i改成i.empno時編譯順利通過。