Oracle 遊標for迴圈
阿新 • • 發佈:2019-01-27
/* 遊標的for迴圈 pl/sql語言提供了遊標的for迴圈語句,【自動執行遊標的open,fetch,close語句和迴圈語句的功能】,當進入迴圈時, 遊標for迴圈語句自動開啟遊標,並提取第一行遊標的資料,當程式處理完成當前所提取的資料而進入下一次迴圈時, 遊標for迴圈語句自動提取下一行資料供程式處理,當提取完結果集合中的所有資料行結束迴圈,並自動關閉遊標; for index_variable in cursor_name[(value[,value]...)] Loop --遊標處理程式碼 end loop; 其中index_variable為遊標for迴圈語句隱含宣告的索引變數,該變數為記錄變數,其結構與遊標查詢語句返回的 的結構集合相同,在程式中可以通過引用索引記錄變數元素來讀取所提取的遊標資料,index_variable中各元素的 名稱與遊標查詢語句選擇列表中所制定的列名相同,如果在遊標查詢語句的選擇列表中存在計算列,則必須為這些 計算列指定別名後才能通過遊標for迴圈語句中的索引變數來訪問這些列資料; ::不要在程式中對遊標進行人工操作,不要在程式中定義用於控制for迴圈的記錄:: */ declare cursor c_sal is select emp.empno,emp.ename,emp.sal from emp; begin for v_sal in c_sal loop -- 隱含開啟遊標:隱含監測c_sal%notfound:隱含關閉遊標 dbms_output.put_line(to_char(v_sal.empno)||'....'||v_sal.ename||to_char(v_sal.sal)); end loop; end; /* ::當所宣告的遊標帶有引數時候,通過遊標for迴圈語句為遊標傳遞引數:: ::可以將遊標看做是一個方法,帶引數的方法 */ declare cursor c_cursor(dept_no number default 10) is select dept.dname,dept.loc from dept where dept.deptno <= dept_no; begin dbms_output.put_line('當dept_no 的引數為30時:'); for c1_rec in c_cursor(30) loop dbms_output.put_line(c1_rec.dname||':'||c1_rec.loc); end loop; end; /* pl/sql 還允許在遊標for迴圈語句中使用子查詢來實現遊標的功能 */ declare begin for c1_rec in (select dept.dname,dept.loc from dept) loop dbms_output.put_line(c1_rec.dname||'...'||c1_rec.loc); end loop; end;