一般在pl/sql中使用顯式游標有如下的過程
我們以輸出employees
表中員工的姓名為例,進行以下的操作
declare
v_emp_first_name employees.first_name%type;
v_emp_last_name employees.last_name%type;
--宣告游標
cursor emp_name_cur is
select emp.first_name,
emp.last_name
from employees emp;
begin
--開啟游標
open emp_name_cur;
loop
--提取當前行到變數
fetch emp_name_cur
into v_emp_first_name,
v_emp_last_name;
-- 自定義結束條件不滿足 或者 當前行為空 則 結束迴圈
exit
when emp_name_cur%rowcount>5
or emp_name_cur%notfound;
dbms_output.put_line(v_emp_first_name ||' '|| v_emp_last_name);
endloop;
--關閉游標
close emp_name_cur;
end;
這就是乙個標準的游標使用示例了,對應關係如下圖
一看到上面的那麼多的步驟要去記,感覺很很繁瑣,啦有沒有什麼簡單的寫法呢?
我們可以使用for
迴圈來簡化上面的寫法
for 迴圈省去了游標的宣告、開啟、提取、測試、關閉等語句
declare
--宣告游標
cursor emp_name_cur is
select emp.first_name,
emp.last_name
from employees emp;
begin
--使用 for 迴圈
for tem_cur in emp_name_cur loop
-- 自定義結束條件不滿足 或者 當前行為空 則 結束迴圈
if emp_name_cur%rowcount>5
or emp_name_cur%notfound then exit;
endif;
dbms_output.put_line(tem_cur.first_name ||' '|| tem_cur.last_name);
end loop;
end;
對於上面的**,我們還有另外一種寫法,如下
begin
--使用 for 迴圈
for tem_cur in (
select emp.first_name,
emp.last_name
from employees emp)
loop
dbms_output.put_line(tem_cur.first_name ||' '|| tem_cur.last_name);
end loop;
end;
另外,游標是可以帶有引數的,這就就可以方便的按照條件進行一些操作了。
如下查詢員工號為110
的員工姓名
declare
--宣告游標 可以傳引數 emp_id
cursor emp_name_cur(v_emp_id employees.employee_id%type) is
select emp.first_name,
emp.last_name
from employees emp
where emp.employee_id=v_emp_id;
begin
--使用 for 迴圈 emp_id=110
for tem_cur in emp_name_cur(110) loop
-- 自定義結束條件不滿足 或者 當前行為空 則 結束迴圈
if emp_name_cur%rowcount>5
or emp_name_cur%notfound then exit;
endif;
dbms_output.put_line(tem_cur.first_name ||' '|| tem_cur.last_name);
end loop;
end;
PLSQL游標的使用
1.使用無參游標cursor,查詢所有員工的姓名和工資 如果需要遍歷多條記錄時,使用游標cursor,無記錄找到使用cemp notfound declare 定義游標 cursor cemp is select ename,sal from emp 定義變數 vename emp.ename ty...
plsql 游標的使用
1 游標實際上就是乙個集合 2 游標的屬性 found 取到值則返回true 沒取到值則返回false notfound 沒取到值則返回true 取到值則返回false isopen 游標是否開啟 rowcount 影響的行數 3 游標數的限制 預設在同乙個會話中,可以開啟300個游標。4 無引數的...
對顯式游標 隱式游標的理解
顯式游標主要是用於對查詢語句的處理,尤其是在查詢結果為多條記錄的情況下。1 建立測試表,插入 測試資料 2 編寫儲存過程 create or replace procedure printstudent sname in out varchar,sage in varchar as resultco...