程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle PL/SQL游標的學習

Oracle PL/SQL游標的學習

編輯:Oracle數據庫基礎

一 游標是什麼

游標字面理解就是游動的光標。

用數據庫語言來描述:游標是映射在結果集中一行數據上的位置實體,有了游標,用戶就可以訪問結果集中的任意一行數據了,將游標放置到某行後,即可對該行數據進行操作,例如提取當前行的數據等。

二 游標的分類

顯式游標和隱式游標

顯式游標的使用需要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;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved