遊標字面理解就是遊動的光標。
用數據庫語言來描述:遊標是映射在結果集中一行數據上的位置實體,有了遊標,用戶就可以訪問結果集中的任意一行數據了,將遊標放置到某行後,即可對該行數據進行操作,例如提取當前行的數據等。
二 遊標的分類
顯式遊標和隱式遊標
顯式遊標的使用需要4步:
1. 聲明遊標
CURSOR mycur(vartype number) is select emp_no,emp_zc from cus_emp_basic where com_no = vartype; |
2. 打開遊標
open mycur(000627)
注:000627是參數
3. 讀取數據
fetch mycur into varno, varprice;
4. 關閉遊標
close mycur;
三 遊標的屬性
oracle 遊標有4個屬性:%ISOPEN,%FOUND,%NOTFOUND,%ROWCOUNT。
%ISOPEN判斷遊標是否被打開,如果打開%ISOPEN等於true,否則等於false;
%FOUND %NOTFOUND判斷遊標所在的行是否有效,如果有效,則%FOUNDD等於true,否則等於false;
%ROWCOUNT返回當前位置爲止遊標讀取的記錄行數。
四 示例
set serveroutput on; declare varno varchar2(20); varprice varchar2(20); CURSOR mycur(vartype number) is select emp_no,emp_zc from cus_emp_basic where com_no = vartype; begin if mycur%isopen = false then open mycur(000627); end if; fetch mycur into varno,varprice; while mycur%found loop dbms_output.put_line(varno||','||varprice); if mycur%rowcount=2 then exit; end if; fetch mycur into varno,varprice; end loop; close mycur; end; |
PL/SQL記錄的結構和C語言中的結構體類似,是由一組數據項構成的邏輯單元。
PL/SQL記錄並不保存在數據庫中,它與變量一樣,保存在內存空間中,在使用記錄時候,要首先定義記錄結構,然後聲明記錄變量。可以把PL/SQL記錄看作是一個用戶自定義的數據類型。
set serveroutput on; declare type person is record ( empno cus_emp_basic.emp_no%type, empzc cus_emp_basic.emp_zc%type); person1 person; cursor mycur(vartype number)is select emp_no,emp_zc from cus_emp_basic where com_no=vartype; begin if mycur%isopen = false then open mycur(000627); end if; loop fetch mycur into person1; exit when mycur%notfound; dbms_output.put_line('僱員編號:'||person1.empno||',地址:'||person1.empzc); end loop; close mycur; end; |
典型遊標for 循環
遊標for循環示顯示遊標的一種快捷使用方式,它使用for循環依次讀取結果集中的行數據,當form循環開始時,遊標自動打開(不需要open),每循環一次系統自動讀取遊標當前行的數據(不需要fetch),當退出for循環時,遊標被自動關閉(不需要使用close)。使用遊標for循環的時候不能使用open語句,fetch語句和close語句,否則會產生錯誤。
set serveroutput on; declare cursor mycur(vartype number)is select emp_no,emp_zc from cus_emp_basic where com_no=vartype; begin for person in mycur(000627) loop dbms_output.put_line('僱員編號:'||person.emp_no||',地址:'||person.emp_zc); end loop; end; |