Oracle入门(十四.12)之游标FOR循环
生活随笔
收集整理的這篇文章主要介紹了
Oracle入门(十四.12)之游标FOR循环
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、游標FOR循環
游標FOR循環處理顯式游標中的行。 這是一個快捷方式,因為游標被打開,循環中的每次迭代都會獲取一次行,當處理最后一行時會退出循環,并且游標會自動關閉。 當最后一行被提取時,循環本身在迭代結束時自動終止。
(1)語法
FOR record_name IN cursor_name LOOPstatement1;statement2;. . . END LOOP;在語法中:?record_name是隱式聲明的記錄的名稱(作為cursor_name%ROWTYPE)
?cursor_name是先前聲明的游標的PL / SQL標識符
注意:v_emp_record是隱式聲明的記錄。?
(2)隱式記錄訪問
可以使用此隱式記錄訪問獲取的數據, 通過使用INTO子句,沒有聲明變量來保存獲取的數據。 該代碼沒有OPEN和CLOSE語句分別打開和關閉游標。
(3)游標FOR循環比較
將游標FOR循環代碼與您在前一文中學到的展開代碼進行比較。 這兩種形式的代碼在邏輯上彼此相同,并產生完全相同的結果。
DECLARECURSOR emp_cursor ISSELECT employee_id, last_name FROM employeesWHERE department_id = 50; BEGINFOR v_emp_record IN emp_cursorLOOPDBMS_OUTPUT.PUT_LINE(…);END LOOP; END; DECLARECURSOR emp_cursor ISSELECT employee_id, last_nameFROM employeesWHERE department_id = 50;v_emp_record emp_cursor%ROWTYPE; BEGINOPEN emp_cursor;LOOPFETCH emp_cursor INTOv_emp_record;EXIT WHEN emp_cursor%NOTFOUND;DBMS_OUTPUT.PUT_LINE(…);END LOOP;CLOSE emp_cursor; END;(4)游標FOR循環:第二個例子
已將v_dept_record隱式聲明為dept_cursor%ROWTYPE。 它包含多少個字段? DECLARECURSOR dept_cursor ISSELECT department_id, department_nameFROM departmentsORDER BY department_id; BEGINFOR v_dept_record IN dept_cursorLOOPDBMS_OUTPUT.PUT_LINE( v_dept_record.department_id|| ' ' ||v_dept_record.department_name);END LOOP; END;二、循環游標準則
(1)指南
?不要聲明控制循環的記錄,因為它是隱式聲明的。?隱式記錄的范圍僅限于循環,因此無法在循環外引用記錄。
?您可以通過record_name.column_name訪問獲取的數據。
(2)測試游標屬性
您仍然可以測試游標屬性,例如%ROWCOUNT。 在取出并處理了五行后,此示例從循環中退出。 光標自動關閉。DECLARECURSOR emp_cursor ISSELECT employee_id, last_name FROM employees; BEGINFOR v_emp_record IN emp_cursorLOOPEXIT WHEN emp_cursor%ROWCOUNT > 5;DBMS_OUTPUT.PUT_LINE( v_emp_record.employee_id|| ' ' ||v_emp_record.last_name);END LOOP; END;
(3)游標FOR循環使用子查詢
你可以更進一步。 你根本不需要聲明游標! 相反,您可以直接在FOR循環中指定光標所基于的SELECT。 這樣做的好處是所有的游標定義都包含在一個FOR ...語句中。 這使代碼的后續更改變得更加容易和快速。
例子
FOR語句中的SELECT子句在技術上是一個子查詢,因此您必須將其放在括號中。BEGINFOR v_emp_record IN (SELECT employee_id, last_nameFROM employees WHERE department_id =50)LOOPDBMS_OUTPUT.PUT_LINE(v_emp_record.employee_id||' '||v_emp_record.last_name);END LOOP; END;
再次,比較這兩種形式的代碼。 它們在邏輯上是相同的。 但是你寧愿寫哪一個?
BEGINFOR v_dept_rec IN (SELECT *FROM departments)LOOPDBMS_OUTPUT.PUT_LINE(…);END LOOP; END; DECLARECURSOR dept_cursor ISSELECT * FROM departments;v_dept_rec dept_cursor%ROWTYPE; BEGINOPEN dept_cursor;LOOPFETCH dept_cursor INTOv_dept_rec;EXIT WHEN dept_cursor%NOTFOUND;DBMS_OUTPUT.PUT_LINE(…);END LOOP;CLOSE dept_cursor; END;總結
以上是生活随笔為你收集整理的Oracle入门(十四.12)之游标FOR循环的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谭松韵欧豪演的电视剧 谭松韵欧豪一起演的
- 下一篇: csgo怎么说话 csgo怎么语音交流