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