Oracle PL/SQL游標(biāo)的學(xué)習(xí) 轉(zhuǎn)自:領(lǐng)測軟件測試網(wǎng)[http://www.] 原文鏈接:http://www./ceshi/ruanjianceshikaifajishu/rjcskfyy/sjk/2007/0526/16690.html
一 游標(biāo)是什么 游標(biāo)字面理解就是游動的光標(biāo)。
用數(shù)據(jù)庫語言來描述:游標(biāo)是映射在結(jié)果集中一行數(shù)據(jù)上的位置實體,有了游標(biāo),用戶就可以訪問結(jié)果集中的任意一行數(shù)據(jù)了,將游標(biāo)放置到某行后,即可對該行數(shù)據(jù)進行操作,例如提取當(dāng)前行的數(shù)據(jù)等。
二 游標(biāo)的分類 顯式游標(biāo)和隱式游標(biāo) 顯式游標(biāo)的使用需要4步:
1. 聲明游標(biāo)
CURSOR mycur(vartype number) is select emp_no,emp_zc from cus_emp_basic where com_no = vartype;
2. 打開游標(biāo) open mycur(000627) 注:000627是參數(shù)
3. 讀取數(shù)據(jù) fetch mycur into varno, varprice;
4. 關(guān)閉游標(biāo) close mycur;
三 游標(biāo)的屬性
oracle 游標(biāo)有4個屬性:%ISOPEN,%FOUND,%NOTFOUND,%ROWCOUNT。 %ISOPEN判斷游標(biāo)是否被打開,如果打開%ISOPEN等于true,否則等于false; %FOUND %NOTFOUND判斷游標(biāo)所在的行是否有效,如果有效,則%FOUNDD等于true,否則等于false; %ROWCOUNT返回當(dāng)前位置為止游標(biāo)讀取的記錄行數(shù)。
四 示例 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記錄的結(jié)構(gòu)和C語言中的結(jié)構(gòu)體類似,是由一組數(shù)據(jù)項構(gòu)成的邏輯單元。
PL/SQL記錄并不保存在數(shù)據(jù)庫中,它與變量一樣,保存在內(nèi)存空間中,在使用記錄時候,要首先定義記錄結(jié)構(gòu),然后聲明記錄變量??梢园裀L/SQL記錄看作是一個用戶自定義的數(shù)據(jù)類型。
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;
典型游標(biāo)for 循環(huán) 游標(biāo)for循環(huán)示顯示游標(biāo)的一種快捷使用方式,它使用for循環(huán)依次讀取結(jié)果集中的行數(shù)據(jù),當(dāng)for循環(huán)開始時,游標(biāo)自動打開(不需要open),每循環(huán)一次系統(tǒng)自動讀取游標(biāo)當(dāng)前行的數(shù)據(jù)(不需要fetch),當(dāng)退出for循環(huán)時,游標(biāo)被自動關(guān)閉(不需要使用close)。使用游標(biāo)for循環(huán)的時候不能使用open語句,fetch語句和close語句,否則會產(chǎn)生錯誤。
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;
|