oracle遊標是什麼

遊標是什麼:

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

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

    遊標的分類:

     顯式遊標和隱式遊標

     顯示遊標的使用需要4步:

     1.聲明遊標

      CURSOR mycur   is   select emp_no,emp_zc

                                 from cus_emp_basic
                                 where com_no = vartype;

   

     2.打開遊標

     open mycur;

     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    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;

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