oracle
中的游標
游標(cursor
)在pl/sql
中可以增強
sql語句的功能,游標是用來查詢資料、獲取結果集中記錄的指標。它可以讓開發者在結果集中訪問結果集中的一行。游標以程式設計的方式訪問資料,從而完成在結果集的每個記錄上的操作。也就是說,游標就是結果集中的記錄指標,該指標指向查詢結果集中的某一行。
游標可以分為兩類:靜態游標和
ref游標。靜態游標是在編譯時和對應的查詢語句繫結在一起,靜態游標可以分為隱式游標和顯示游標。
ref游標(應用游標)和對應的查詢語句只有在執行時才能決定,在開發時一般用
ref游標和游標變數實現,為了使用
ref游標必須使用游標變數。
ref游標又可分為兩種引用游標:強返回型別游標和弱返回型別游標。
那麼如何使用游標呢?首先,宣告乙個游標,就是將乙個查詢語句繫結到游標上,宣告時,查詢語句並不執行。宣告游標的語法如下:
cursor
游標名[(
引數)]
[return
返回值型別
] is select語句
游標宣告中,可以有引數,可以有返回值,規定返回值型別,游標宣告中的
select
中不能有
into
子句。
open
命令用於開啟游標,開啟游標時,與繫結的
select
語句開始執行。並且查詢的結果集中,游標指標預設的指向第乙個值(行)。
open
游標名[
(引數)]
若游標有引數,則開啟游標時,就要為游標傳實際引數。
從游標中提取資料,使用
fetch
語句可以從開啟的游標中檢索資料
,每次檢索一行,
fetch
完之後,游標自動定位到下一行。語法是:
fetch
游標名into
變數名
fetch
命令常寫在迴圈裡面,用於從結果集中檢索一行資料,如果是多列,則要定義多個變數,或者乙個記錄型別的變數接受。
使用完游標之後,應該關閉游標,語法是:
close
游標名
游標屬性:
%found
如果fetch
到值,則
%found
返回值是
true
,如果fetch
不到值,則
%found
返回值是
false。
%notfound
和%found
的意思正好相反。
%rowcount
表示每fetch
成功一次,
rowcount
就自動加
1,初始值為
0,表示返回值返回成功的行數。
%isopen
判斷游標是否已經開啟,
true
是開啟,
false
是未開啟。
下面是例子:
declare
cursorname testss.names%type;
cursorcursorssisselectnamesfromtestss;
begin
opencursorss;
loop
fetchcursorssintocursorname;
exit when cursorss%notfound;//退出條件
insertintotestvalues(default,cursorname);
endloop;
closecursorss;
end;
如果帶引數,則如下:
declare
cursorname testss.names%type;
cursorcursorss(canshunumber)isselectnamesfromtestsswhereid=canshu;
begin
opencursorss(1);
loop
fetchcursorssintocursorname;
exitwhencursorss%notfound;
insertintotestvalues(default,cursorname);
endloop;
closecursorss;
end;
關於宣告變數部分和宣告游標部分,放在
declare
中,在begin
中開啟游標並且使用。需要注意的是,游標一定要有退出條件,不然會陷入死迴圈,有可能會摧毀資料或者資料庫。使用游標的好處是可以對查詢出的滿足條件的逐條記錄進行操作。比頻繁的開啟資料庫
,運算元據,關閉資料庫更方便,更高效。雖然所佔的記憶體增加了,但是對於批處理的資料,是很好的解決辦法。
Oracle中的游標
cursor found最近一次讀取是否成功 notfound isopen游標開啟時返回true rowcount返回已從游標讀取的記錄數 輸出年齡大於等於18的使用者的id跟name declare v id t.id type v name t.name type cursor c user ...
Oracle中的游標
游標 用來處理使用select語句從資料庫中檢索到的多行記錄的工具。1 游標的分類 1 顯示游標 返回多條記錄時,使用顯示游標逐行讀取 2 隱式游標 pl sql自動為dml語句建立隱式游標,包含一條返回記錄 2 顯示游標 1 顯示游標的使用步驟 宣告游標 cursor cursor name pa...
oracle 中的游標
oracle 中的游標 通俗易懂的sql 直接上!簡單的游標使用滴呀 使用for obj in objs loop end loop declare cursor c job isselect name,course,greade from stu c row c job rowtype begin...