使用隱式游標和顯式游標:
1.查詢返回單行記錄時→隱式游標;
2.查詢返回多行記錄並逐行進行處理時→顯式游標
--顯示游標屬性
declare
cursor cur_emp is select * from emp;
row_emp cur_emp%rowtype;
begin
open cur_emp;
fetch cur_emp into row_emp;
while cur_emp%found
loop
dbms_output.put_line(row_emp.empno||'----'||row_emp.ename);
fetch cur_emp into row_emp;
end loop;
close cur_emp;
end;
--使用顯式游標修改資料(給所有的部門經理加薪1000)
declare
cursor emp_cur is
select empno,ename,sal from emp where job='manager' for update;
emp_row emp_cur%rowtype;
begin
open emp_cur;
loop
fetch emp_cur into emp_row;
if emp_cur%notfound then
exit;
else
update emp set sal=sal+1000 where current of emp_cur;
end if;
end loop;
commit;
close emp_cur;
end;
·注意:1、如果游標開啟之前或關閉之後,使用游標屬性,oracle會丟擲乙個invalid_cursor錯誤(ora-01001);
2、如果在第一次fetch後結果集是空的,%found=false,%notfound=true,%rowcount=0;
3、如果使用了bulk collect,那麼%rowcount的值可能不是0或1,實際上他返回的是提取到相關集合的行數。
--游標for迴圈(給所有的部門經理減薪1000)
declare
cursor emp_cur is
select empno,ename,sal from emp where job='manager' for update;
begin
for emp_row in emp_cur
loop
update emp set sal=sal-1000 where current of emp_cur;
end loop;
commit;
end;
--我們可以看到游標for迴圈確實很好的簡化了游標的開發,我們不在需要open、fetch和close語句,不在需要用%found屬性檢測是否到最後一條記錄,這一切oracle隱式的幫我們完成了。
--給經理加薪5000,其他加薪1000
declare
cursor emp_cur is
select * from emp for update;
begin
for emp_row in emp_cur
loop
if emp_row.job='manager' then
update emp set sal=sal+5000 where current of emp_cur;
else
update emp set sal=sal+1000 where current of emp_cur;
end if;
end loop;
end;
ORACLE游標的應用
在oracle資料庫中,可以使用游標瀏覽資料 更新資料和刪除資料,接下來列舉以幾個簡單的例子 通過使用游標既可以逐行檢索結果集中的記錄,又可以更新或刪除當前游標行的資料如果要通過游標更新或刪除資料,在定義游標時必須要帶有for update子句其語句格式如下 cursor cursor name i...
oracle游標的使用
當select語句從資料庫中返回的記錄多餘一條時,就可以使用游標 cursor 游標可以理解為一次訪問乙個的一組記錄。select語句將列提取到游標中,然後根據游標取得記錄。使用游標時需要遵從以下的5個步驟 1 宣告一些變數,用於儲存select語句返回列值 2 宣告游標,並制定select語句 3...
Oracle游標的問題
游標 cursor 是oracle系統在記憶體中開闢的乙個工作區,在其中存放select語句返回的查詢集 他是乙個查詢結果集,相當於快取 游標內有指標 在游標所定義的工作區中,存在著乙個指標 pointer 在初始狀態它指向查詢結果的首記錄。當指標放置到某行後,即可對該行資料進行操作。對游標的操作有...