日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle入门(十四.12)之游标FOR循环

發布時間:2023/12/3 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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語句分別打開和關閉游標。

DECLARECURSOR emp_cursor ISSELECT employee_id, last_name FROM employeesWHERE department_id = 50; BEGINFOR v_emp_record IN emp_cursorLOOPDBMS_OUTPUT.PUT_LINE(v_emp_record.employee_id|| ' ' ||v_emp_record.last_name);END LOOP; END;

(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循环的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。