真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

oracle怎么控制游標(biāo) oracle的游標(biāo)作用

oracle中如何定義一個游標(biāo)?

1.游標(biāo)定義:\x0d\x0acursor XXXA is\x0d\x0a SELECT 語句;\x0d\x0aXXXB cursorName%rowtype;\x0d\x0a\x0d\x0aXXXA: 游標(biāo)名\x0d\x0aXXXB: 游標(biāo)行數(shù)據(jù)定義\x0d\x0a\x0d\x0a2. 打開游標(biāo):\x0d\x0a-- 打開之前最好先關(guān)一下,防止上次發(fā)生異常沒有關(guān)掉而引發(fā)不必要的異常\x0d\x0a IF XXXA%ISOPEN THEN\x0d\x0a CLOSE XXXA;\x0d\x0a END IF;\x0d\x0a\x0d\x0aOpen XXXA ;\x0d\x0a Loop\x0d\x0a Fetch XXXA into XXXB;\x0d\x0a exit when XXXA%NOTFOUND;\x0d\x0a... ... 處理邏輯\x0d\x0a end loop;\x0d\x0a close XXXA;

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比湘西土家族網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式湘西土家族網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋湘西土家族地區(qū)。費用合理售后完善,十年實體公司更值得信賴。

Oracle 游標(biāo)

游標(biāo)能夠根據(jù)查詢條件從數(shù)據(jù)表中提取一組記錄,將其作為一個臨時表置于數(shù)據(jù)緩沖區(qū)中,利用指針逐行對記錄數(shù)據(jù)進(jìn)行操作。

Oracle中的游標(biāo)分為顯示游標(biāo)和隱式游標(biāo) 。

在執(zhí)行SQL語句時,Oracle會自動創(chuàng)建隱式游標(biāo),該游標(biāo)是內(nèi)存中處理該語句的數(shù)據(jù)緩沖區(qū),存儲了執(zhí)行SQL語句的結(jié)果。通過隱式游標(biāo)屬性可獲知SQL語句的執(zhí)行狀態(tài)信息。

%found:布爾型屬性,如果sql語句至少影響到一行數(shù)據(jù),值為true,否則為false。

%notfound:布爾型屬性,與%found相反。

%rowcount:數(shù)字型屬性,返回受sql影響的行數(shù)。

%isopen:布爾型屬性,當(dāng)游標(biāo)已經(jīng)打開時返回true,游標(biāo)關(guān)閉時則為false。

用戶可以顯式定義游標(biāo)。使用顯式游標(biāo)處理數(shù)據(jù)要4個步驟:定義游標(biāo)、打開游標(biāo)、提取游標(biāo)數(shù)據(jù)和關(guān)閉游標(biāo)。

游標(biāo)由游標(biāo)名稱和游標(biāo)對應(yīng)的select結(jié)果集組成。定義游標(biāo)應(yīng)該放在pl/sql程序塊的聲明部分。

語法格式:cursor 游標(biāo)名稱(參數(shù)) is 查詢語句

打開游標(biāo)時,游標(biāo)會將符合條件的記錄送入數(shù)據(jù)緩沖區(qū),并將指針指向第一條記錄。

語法格式:open 游標(biāo)名稱(參數(shù));

將游標(biāo)中的當(dāng)前行數(shù)據(jù)賦給指定的變量或記錄變量。

語法格式:fetch 游標(biāo)名稱 into 變量名;

游標(biāo)一旦使用完畢,就應(yīng)將其關(guān)閉,釋放與游標(biāo)相關(guān)聯(lián)的資源。

語法格式:close 游標(biāo)名稱;

declare

cursor c1 is? select sno,cno,grade from sc;

v_sno sc.sno%type;

v_cno sc.cno%type;

v_grade sc.grade%type;

begin

open c1;

loop

? fetch c1 into v_sno,v_cno,v_grade;

? exit when c1%notfound;--緊跟fetch之后

if c1%found then

dbms_output.put_line(to_char(c1%rowcount)||v_cno);

end if;

end loop;

close c1;?

end;

declare

cursor c1 is select sno,cno,grade from sc;

v_sno sc.sno%type;

v_cno sc.cno%type;

v_grade sc.grade%type;

begin

open c1;

fetch c1 into v_sno,v_cno,v_grade;

while c1%found loop

? dbms_output.put_line(v_sno||v_cno||v_grade);

?fetch c1 into v_sno,v_cno,v_grade;

end loop;

close c1;?

end;

第三種:for

declare

cursor c1 is select sno,cno,grade from sc;

begin

for item in c1 loop

dbms_output.put_line(rpad(item.sno,'10',' ')||rpad(item.cno,'10',' ')||rpad(item.grade,'10',' '));

end loop;

end;

oracle中的游標(biāo)使用靜態(tài)游標(biāo)

游標(biāo)是構(gòu)建在PL/SQL中 用來查詢數(shù)據(jù) 獲取記錄集的指針 它讓開發(fā)者 一次訪問結(jié)果集中一行記錄

在oracle中提供了兩種游標(biāo) 靜態(tài)游標(biāo) ref游標(biāo)

靜態(tài)游標(biāo) 靜態(tài)游標(biāo)是在編譯的時候就被確定 然后把結(jié)果集復(fù)制到內(nèi)存中 靜態(tài)游標(biāo)又分為兩種 隱式游標(biāo)和顯示游標(biāo)

ref游標(biāo) ref游標(biāo)是在運行的時候加載結(jié)果集

先來看看靜態(tài)游標(biāo)中的隱式游標(biāo)

在PL/SQL中為所有的SQL數(shù)據(jù)操縱語句(包括返回一行的select)隱式聲明游標(biāo) 稱為隱式游標(biāo) 主要原因是用戶不能直接命名和控制此類游標(biāo) 當(dāng)用戶在PL/SQL 中使用數(shù)據(jù)操縱語句(DML)時 oracle預(yù)先定義一個名稱為SQL的隱式游標(biāo) 通過 檢查隱式游標(biāo)的屬性獲取與最近執(zhí)行的SQL語句相關(guān)信息 在執(zhí)行DML語句之后 隱式游標(biāo)屬性返回信息 隱式游標(biāo)屬性包括 %found %notfound %rowcount %isopen %found 只有DML語句影響一行或多行時 %found屬性才返回true declare num number; begin update emp set empno= where empno= ; if sql%found then dbms_output put_line( 存在記錄 ); else dbms_output put_line( 不存在記錄 ); end if; end; %notfound %notfound屬性作用正好跟%found屬性相反 如果DML語句沒有影響任何行數(shù) 則%notfound屬性返回true declare begin delete from emp where empno= ; if sql%notfound then dbms_output put_line( 刪除失敗 ); end if; end; %rowcount %rowcount屬性返回DML語句影響的行數(shù) 如果DML語句沒有影響任何行數(shù) 則%rowcount屬性將返回 declare num number; begin update emp set empno= where empno= ; if sql%rowcount= then dbms_output put_line( 不存在記錄 ); else dbms_output put_line( 存在記錄 ); end if; end; %isopen %isopen屬性判斷SQL游標(biāo)是否已經(jīng)打開 在執(zhí)行SQL語句之后 oracle自動關(guān)閉SQL 游標(biāo) 所以隱式游標(biāo)的%isopen屬性始終為false 在PL/SQL中向標(biāo)準(zhǔn)的select語句增加單獨的into子句 就可以將從表或視圖中查詢的記錄賦予變量或行變量 需要注意的是select into 語句結(jié)果必須有且只能有一行 如果查詢沒有返回行 PL/SQL將拋出no_data_found異常 如果查詢返回多行 則拋出 too_many_rows 異常 如果拋出異常 則停止執(zhí)行 控制權(quán)轉(zhuǎn)移到異常處理部分(沒有 異常處理 則程序中斷) 在引發(fā)異常時 將不使用屬性%found %notfound %rowcount來查明DML語句是否 已影響了行數(shù) declare num number; begin select empno into num from emp where empno= ; if sql%rowcount= or sql%notfound then dbms_output put_line( 不存在記錄 ); else dbms_output put_line( 存在記錄 ); end if; end;

顯示游標(biāo) 顯示游標(biāo)是由用戶顯示聲明的游標(biāo) 根據(jù)在游標(biāo)中定義的查詢 查詢返回的行集合可以 包含零行或多行 這些行稱為活動集 游標(biāo)將指向活動集中的當(dāng)前行 顯示游標(biāo)的操作過程 使用顯示游標(biāo)的 個步驟 ( )聲明游標(biāo) ( )打開游標(biāo) ( )從游標(biāo)中獲取結(jié)果集 ( )關(guān)閉游標(biāo) cursor cursor_name [(parameter[ parameter])] [return return_type] is select_statement; cursor_name 指游標(biāo)的名稱 parameter?? 為游標(biāo)指定輸入?yún)?shù) return_type 定義游標(biāo)提取行的行類型 select_statement 為游標(biāo)定義查詢語句 open 游標(biāo)名稱 fetch 從游標(biāo)中提取行 close 關(guān)閉游標(biāo)

打開游標(biāo) 執(zhí)行游標(biāo)中定義的查詢語句 綁定輸入?yún)?shù) 將游標(biāo)指針指 向結(jié)果集的BOF位置 open cursor_name [parameters]

fetch 在打開游標(biāo)之后 可以從游標(biāo)中提取記錄 fetch cursor_name into variable_name; fetch 是提取結(jié)果集中一行記錄存儲在變量中 每次提取之后 結(jié)果集指針 就向前移動一行

close 在處理游標(biāo)中的所有行之后 必須關(guān)閉游標(biāo) 以釋放分配給游標(biāo)的所有資源 close cursor_name 用戶可以通過檢查游標(biāo)屬性來確定游標(biāo)的當(dāng)前狀態(tài)

顯示游標(biāo)的屬性如下 %found 如果執(zhí)行最后一條fetch語句 成功返回行 則%found屬性為true %notfound 如果執(zhí)行最后一條fetch語句 未能提取行 則%notfound屬性為true %isopen:如果游標(biāo)已經(jīng)打開 則返回true 否則返回false %rowcount 返回到目前為止游標(biāo)提取的行數(shù) %rowcount為數(shù)字類型屬性 在第一 次獲取之前 %rowcount為零 當(dāng)fetch語句返回一行時 則該數(shù)加

declare info emp%rowtype; cursor my_cur is select * from emp where empno= ; begin open my_cur; dbms_output put_line(my_cur%rowcount); loop if my_cur%isopen then fetch my_cur into info; exit when my_cur%notfound; dbms_output put_line(info empno); dbms_output put_line(my_cur%rowcount); end if; end loop; close my_cur; end;

使用顯示游標(biāo)刪除或更新 使用游標(biāo)時 如果處理過程中需要刪除或更新 在定義游標(biāo)查詢語句時 必須使用select for update語句 而在執(zhí)行delete或update時使用 where current of 子句指定游標(biāo)當(dāng)前行 cursor cursor_name is select_statement for update[of column] wait/nowait 在使用for update 子句聲明游標(biāo)之后 可以使用以下語法更新行 update table_name set column_name=column_value where current of cursor_name; update命令中使用的列必須出現(xiàn)在for update of 子句中 select 語句必須只包括一個表 而且delete和update語句只有在打開游標(biāo)并且提取 特定行之后才能使用

declare cursor cur_emp is select * from emp where sal for update of sal; num emp%rowtype; begin open cur_emp; loop fetch cur_emp into num; exit when cur_emp%notfound; update emp set sal= where current of cur_emp; end loop; close cur_emp; end;

帶參數(shù)的顯示游標(biāo) PL/SQL中允許顯示游標(biāo)接受輸入?yún)?shù) 用于聲明帶參數(shù)的顯示游標(biāo)語法 cursor cursor_name[param_name data_type] [return return type] is select_statement declare dept_num emp deptno%type; emp_num?? emp empno%type; emp_nam emp ename%type; cursor emp_cur(deptparam number) is select empno ename from emp where deptno=deptparam; begin dept_num :=部門編號; open emp_cur(dept_num); loop fetch emp_cur into emp_num emp_nam; exit when emp_cur%notfound; dbms_output put_line(emp_num|| ||emp_nam); end loop; close emp_cur; end;

可以使用循環(huán)游標(biāo)來簡化顯示游標(biāo)

循環(huán)游標(biāo)隱式打開顯示游標(biāo)(不需要open) 自動從結(jié)果集提取記錄 然后處理完所有記錄自動關(guān)閉游標(biāo) 循環(huán)游標(biāo)自動創(chuàng)建 %rowtype類型的變量并將此變量用做記錄的索引 循環(huán)游標(biāo)語法如下 for record_index in cursor_name record_index是PL/SQL自動創(chuàng)建的變量 此變量的屬性聲明為%rowtype類型 作用 域for循環(huán)之內(nèi)

循環(huán)游標(biāo)的特性有 從游標(biāo)中提取所有記錄之后自動關(guān)閉游標(biāo)

lishixinzhi/Article/program/Oracle/201311/18322


網(wǎng)頁標(biāo)題:oracle怎么控制游標(biāo) oracle的游標(biāo)作用
網(wǎng)站URL:http://weahome.cn/article/hjcsdh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部