【IT168技術文檔】
SQL是用於訪問Oracle資料庫的語言,PL/SQL擴展和加強了SQL的功能,它同時引入了更強的程序邏輯, 下面在本文中將對遊標的使用進行一下講解,希望可以和大家共同學習進步。
遊標字面理解就是遊動的光標。遊標是SQL的一個內存工作區,由系統或用戶以變量的形式定義。在某些情況下,需要把數據從存放在磁碟的表中調到計算機內存中進行處理,最後將處理結果顯示出來或最終寫回資料庫。這樣數據處理的速度才會提高,否則頻繁的磁碟數據交換會降低效率。用資料庫語言來描述遊標就是映射在結果集中一行數據上的位置實體,有了遊標,用戶就可以訪問結果集中的任意一行數據了,將遊標放置到某行後,即可對該行數據進行操作,例如提取當前行的數據等。
遊標有兩種類型:顯式遊標和隱式遊標。遊標一旦打開,數據就從資料庫中傳送到遊標變量中,然後應用程式再從遊標變量中分解出需要的數據,並進行處理。
當系統使用一個隱式遊標時,可以通過隱式遊標的屬性來了解操作的狀態和結果,進而控制程序的流程。隱式遊標可以使用名字SQL來訪問,但要注意,通過SQL遊標名總是只能訪問前一個處理操作或單行SELECT操作的遊標屬性。所以通常在剛剛執行完操作之後,立即使用SQL遊標名來訪問屬性。遊標的屬性有四種,分別是SQL %ISOPEN,SQL %FOUND,SQL %NOTFOUND,SQL %ROWCOUNT。
SQL%ISOPEN返回的類型為布爾型,判斷遊標是否被打開,如果打開%ISOPEN等於true,否則等於false,即執行過程中為真,結束後為假。
SQL%NOTFOUND返回值為布爾型,判斷遊標所在的行是否有效,如果有效,則%FOUNDD等於true,否則等於false,即與%FOUND屬性返回值相反。
SQL%FOUND返回值的類型為布爾型,值為TRUE代表插入 刪除 更新或單行查詢操作成功。
SQL%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(043925);
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記錄看作是一個用戶自定義的數據類型。
遊標for循環是顯示遊標的一種快捷使用方式,它使用for循環依次讀取結果集中的行數據,當form循環開始時,遊標自動打開(不需要open),每循環一次系統自動讀取遊標當前行的數據(不需要fetch),當退出for循環時,遊標被自動關閉(不需要使用close)。使用遊標for循環的時候不能使用open語句,fetch語句和close語句,否則會產生錯誤。