PL/SQL Cursor遊標的基本使用

Cursor:遊標是SQL的一個內存工作區,由系統或用戶以變量的形式定義。遊標的作用就是用於臨時存儲從數據庫中提取的數據塊。

Cursor類型包含三種: 靜態遊標:分爲顯式(explicit)遊標和隱式(implicit)遊標;REF遊標:是一種引用類型,類似於指針。

顯式遊標

1) 顯式Cursor的屬性包含: 
遊標的屬性   返回值類型   意義  
%ROWCOUNT   整型  獲得FETCH語句返回的數據行數  
%FOUND  布爾型 最近的FETCH語句返回一行數據則爲真,否則爲假  
%NOTFOUND   布爾型 與%FOUND屬性返回值相反  
%ISOPEN 布爾型 遊標已經打開時值爲真,否則爲假  

2) 對於顯式遊標的運用分爲四個步驟: 
a 定義遊標---Cursor  [Cursor Name]  IS; 
b 打開遊標---Open  [Cursor Name]; 
c  操作數據---Fetch  [Cursor name] 
d  關閉遊標---Close [Cursor Name] 


遊標一般格式:
DECLARE 遊標名稱 CURSOR FOR SELECT 字段1,字段2,字段3,... FROM 表名 WHERE ...
OPEN 遊標名稱
FETCH NEXT FROM 遊標名稱 INTO 變量名1,變量名2,變量名3,...
WHILE @@FETCH_STATUS=0
        BEGIN
                  SQL語句執行過程... ...
                  FETCH NEXT FROM 遊標名稱 INTO 變量名1,變量名2,變量名3,...
        END
CLOSE 遊標名稱
DEALLOCATE 遊標名稱 (刪除遊標)


cursor 遊標示例1
set serveroutput on;
declare
-- 聲明變量爲數據表列的類型
v_empno emp.empno%type; 
--通過%type取emp表的empno的類型
v_ename emp.ename%type;
--聲明一個遊標對應一個查詢
cursor v_emp_cursor 
  is select empno,ename 
     from emp order by ename;
begin
-- 從遊標中獲取數據
open v_emp_cursor;
loop
--從遊標中取出一行存入變量
--取出以後,遊標下移
fetch v_emp_cursor 
   into v_empno, v_ename;
--退出條件
exit when v_emp_cursor%notfound;
--打印輸出
dbms_output
  .put_line(v_empno||','||v_ename);
end loop;
close v_emp_cursor;
end;

Cursor示例2
table1結構如下
id    int
name  varchar(50)

declare @id int
declare @name varchar(50)
declare cursor1 cursor for         --定義遊標cursor1
select * from table1               --使用遊標的對象(跟據需要填入select文)
open cursor1                       --打開遊標

fetch next from cursor1 into @id,@name  --將遊標向下移1行,獲取的數據放入之前定義的變量@id,@name中

while @@fetch_status=0           --判斷是否成功獲取數據
begin
update table1 set name=name+'1'
where id=@id                           --進行相應處理(跟據需要填入SQL文)

fetch next from cursor1 into @id,@name  --將遊標向下移1行
end

close cursor1                   --關閉遊標
deallocate cursor1


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章