/*---------游標-------*/
/*游標是乙個機制,通過這個機制可以給乙個sql語句命名,並操作該
sql返回的資料或者使用該sql返回的資料操作其他的資料
*//*
顯式游標:顯式宣告游標,且由**管理游標生命週期
隱式游標:非顯式宣告游標,由系統管理游標生命週期
及有無open,close。
*/--loop..end loop;
declare
cursor c_departments(p_department_id number) is
select dp.department_id, dp.department_name
from departments dp
where dp.department_id = p_department_id;
c_dept_rec c_departments%rowtype;
v_dept_id number := 2001;
begin
open c_departments(v_dept_id);
loop
fetch c_departments
into c_dept_rec;
exit when c_departments%notfound;
dbms_output.put_line('部門id:' || c_dept_rec.department_id || ',部門名稱:' ||
c_dept_rec.department_name);
end loop;
close c_departments;
end;
--while..loop..end loop;
declare
cursor c_departments(p_department_id number) is
select dp.department_id, dp.department_name
from departments dp
where dp.department_id = p_department_id;
c_dept_rec c_departments%rowtype;
v_department_id number := 2001;
begin
open c_departments(v_department_id);
fetch c_departments --不用帶引數
into c_dept_rec;
while c_departments%found loop
dbms_output.put_line('部門id:' || c_dept_rec.department_id || ',部門名稱:' ||
c_dept_rec.department_name);
fetch c_departments
into c_dept_rec;
end loop;
close c_departments;
end;
--for..in..loop..end loop;
declare
cursor c_departments(p_dept_id number) is
select dp.department_id, dp.department_name
from departments dp
where dp.department_id = p_dept_id;
--不用宣告 c_dept_rec c_departments%rowtype;
v_dept_id number := 2001;
begin
--不用open,close
for c_dept_rec in c_departments(v_dept_id)/*此處要帶引數*/ loop
dbms_output.put_line('部門id:' || c_dept_rec.department_id || ',部門名稱:' ||
c_dept_rec.department_name);
end loop;
end;
--隱式游標
/*從資料庫中獲取資料到變數時,如果相關sql只返回低於1條記錄,
使用顯式游標過於麻煩,oracle提供select into快速實現改功能。
所有dml語句執行時建立乙個隱式游標,所以select into也是游標,
不過其建立和開啟、關閉全部由oracle自動完成
*/--select into
declare
v_emp_num employees.employee_number%type;
v_emp_name employees.employee_name%type;
begin
select em.employee_number,em.employee_name
into v_emp_num,v_emp_name
from employees em
where em.employee_name='john smith';
dbms_output.put_line('員工號碼:'||v_emp_num||',員工姓名:'||v_emp_name);
exception
when no_data_found then
dbms_output.put_line('無此員工,請檢查');
end;
Oracle PL SQL游標的使用方法
演示隱式游標,系統自動宣告,自動開啟,自動使用並且自動關閉 begin update emp set sal 1000 dbms output.put line 影響的行數 sql rowcount end rollback 游標的使用方法 第一步 宣告游標 第二步 開啟游標 第三步 使用游標進行迴...
ORACLE中游標的使用方法
游標被用的最多的是在儲存過程中執行批量修改或是批量刪除操作,比如刪除一條主表記錄之後,可以執行乙個儲存過程刪除該記錄對應的明細記錄。或者修改某張表的某個資料後反寫另一張表的資料。這在erp軟體開發中是經常用到的,例如出庫單實提之後要反寫合同上的實提重量等等,這也要靠好的資料庫設計來支援。下面是乙個o...
學習筆記 游標的使用方法
游標是sql 的一種資料訪問機制。可以將游標簡單的看成是查詢的結果集的乙個指標,可以根據需要在結果集上面來回滾動,瀏覽需要的資料。靜態游標 靜態游標的結果集,在游標開啟的時候建立在tempdb中,不論你在操作游標的時候,如何運算元據庫,游標中的資料集都不會變。如果想與操作之後的資料一致,則重新關閉開...