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

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

oracle如何存儲游標(biāo) oracle存儲過程定義游標(biāo)

Oracle游標(biāo)使用總結(jié)

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

創(chuàng)新互聯(lián)為客戶提供專業(yè)的網(wǎng)站設(shè)計制作、成都做網(wǎng)站、程序、域名、空間一條龍服務(wù),提供基于WEB的系統(tǒng)開發(fā). 服務(wù)項目涵蓋了網(wǎng)頁設(shè)計、網(wǎng)站程序開發(fā)、WEB系統(tǒng)開發(fā)、微信二次開發(fā)、成都手機(jī)網(wǎng)站制作等網(wǎng)站方面業(yè)務(wù)。

顯示游標(biāo)(Explicit Cursor):在PL/SQL程序中定義的 用于查詢的游標(biāo)稱作顯示游標(biāo)

隱式游標(biāo)(Implicit Cursor):是指非PL/SQL程序中定義的 而且是在PL/SQL中使用UPDATE/DELETE語句時 Oracle系統(tǒng)自動分配的游標(biāo)

一 顯示游標(biāo)

使用步驟

( )定義 ( )打開 ( )使用 ( )關(guān)閉

使用演示

首先創(chuàng)建測試用表STUDENT 腳本如下

( ) 使用WHILE循環(huán)處理游標(biāo)

create or replace PROCEDURE PROC_STU AS

BEGIN

顯示游標(biāo)使用 使用while循環(huán)

declare

定義游標(biāo) 名稱為cur_stu

cursor cur_stu is

select stuno stuname from student order by stuno;

定義變量 存放游標(biāo)取出的數(shù)據(jù)

v_stuno varchar( );

v_stuname varchar( );

begin

打開游標(biāo)cur_stu

open cur_stu;

將游標(biāo)的當(dāng)前行取出存放到變量中

fetch cur_stu into v_stuno v_stuname;

while cur_stu%found 游標(biāo)所指還有數(shù)據(jù)行 則繼續(xù)循環(huán)

loop

打印結(jié)果

dbms_output PUT_LINE(v_stuno|| ||v_stuname);

繼續(xù)將游標(biāo)所指的當(dāng)前行取出放到變量中

fetch cur_stu into v_stuno v_stuname;

end loop;

close cur_stu; 關(guān)閉游標(biāo)

end;

END PROC_STU ;

( ) 使用IF ELSE代替WHILE循環(huán)處理游標(biāo)

create or replace PROCEDURE PROC_STU AS

BEGIN

顯示游標(biāo)使用 使用if判斷

declare

定義游標(biāo) 名稱為cur_stu

cursor cur_stu is

select stuno stuname from student order by stuno;

定義變量 存放游標(biāo)取出的數(shù)據(jù)

v_stuno varchar( );

v_stuname varchar( );

begin

打開游標(biāo)cur_stu

open cur_stu;

將游標(biāo)的當(dāng)前行取出存放到變量中

fetch cur_stu into v_stuno v_stuname;

loop

if cur_stu%found then 如果游標(biāo)cur_stu所指還有數(shù)據(jù)行

打印結(jié)果

dbms_output PUT_LINE(v_stuno|| ||v_stuname);

繼續(xù)將游標(biāo)所指的當(dāng)前行取出放到變量中

fetch cur_stu into v_stuno v_stuname;

else

exit;

end if;

end loop;

close cur_stu; 關(guān)閉游標(biāo)

end;

END PROC_STU ;

( ) 使用FOR循環(huán)處理游標(biāo)

create or replace PROCEDURE PROC_STU AS

BEGIN

顯示游標(biāo)使用 使用for循環(huán)

declare

定義游標(biāo) 名稱為cur_stu

cursor cur_stu is

select stuno stuname from student order by stuno;

begin

for stu in cur_stu

loop

dbms_output PUT_LINE(stu stuno|| ||stu stuname);

循環(huán)做隱含檢查 %notfound

end loop;

自動關(guān)閉游標(biāo)

end;

END PROC_STU ;

( ) 常用的使用EXIT WHEN處理游標(biāo)

create or replace

PROCEDURE PROC_STU _ AS

BEGIN

顯示游標(biāo)使用 使用exit when循環(huán)

declare

定義游標(biāo) 名稱為cur_stu

cursor cur_stu is

select stuno stuname from student order by stuno;

定義變量 存放游標(biāo)取出的數(shù)據(jù)

v_stuno varchar( );

v_stuname varchar( );

begin

打開游標(biāo)cur_stu

open cur_stu;

loop

將游標(biāo)的當(dāng)前行取出存放到變量中

fetch cur_stu into v_stuno v_stuname;

exit when cur_stu%notfound; 游標(biāo)所指還有數(shù)據(jù)行 則繼續(xù)循環(huán)

打印結(jié)果

dbms_output PUT_LINE(v_stuno|| ||v_stuname);

end loop;

close cur_stu; 關(guān)閉游標(biāo)

end;

END PROC_STU _ ;

二 隱式游標(biāo)

使用演示

create or replace PROCEDURE PROC_STU AS

BEGIN

隱式游標(biāo)使用

update student set stuname= 張燕廣 where stuno= ;

如果更新沒有匹配則插入一條新記錄

if SQL%NOTFOUND then

insert into student(STUNO STUNAME AGE GENDER)

values( 張燕廣 男 );

end if;

END PROC_STU ;

說明

所有的SQL語句在上下文區(qū)內(nèi)部都是可執(zhí)行的 因為都有一個游標(biāo)指向上下文區(qū) 此游標(biāo)就是

SQL游標(biāo) 與現(xiàn)實游標(biāo)不同的是 SQL游標(biāo)在PL/SQL中不需要打開和關(guān)閉 而是在執(zhí)行UPDATE

DELETE是自動打開和關(guān)閉

上面例子中就是通過SQL%NOTFOUND游標(biāo)屬性判斷UPDATE語句的執(zhí)行結(jié)果決定是否需要插入新記錄 CREATE TABLE STUDENT (

STUNAME VARCHAR ( BYTE)

STUNO VARCHAR ( BYTE)

AGE NUMBER

GENDER VARCHAR ( CHAR)

lishixinzhi/Article/program/Oracle/201311/17531

Oracle存儲過程游標(biāo)for循環(huán)怎么寫

--數(shù)字

FOR?loop?index?IN?[REVERSE]?lowest?number?..?highest?number

LOOP

executable?statement(s)

END?LOOP;

具體情形:

FOR?loop_counter?IN?1?..?10

LOOP

...?executable?statements?...

END?LOOP;

--游標(biāo):

DECLARE

CURSOR?occupancy_cur?IS?

SELECT?pet_id,?room_number

FROM?occupancy?WHERE?occupied_dt?=?SYSDATE;

BEGIN

FOR?occupancy_rec?IN?occupancy_cur

LOOP

update_bill?(occupancy_rec.pet_id,?occupancy_rec.room_number);

END?LOOP;

END;

oracle存儲過程游標(biāo)問題

--打開游標(biāo)并提取后面SQL的第一行數(shù)據(jù)放到游標(biāo)中 這里就是打開游標(biāo)

open for 是隱式游標(biāo)的寫法 不建議使用 這種游標(biāo)好象不需要關(guān)閉 具體你自己測試下 而且少了expection 處理

fetch mycur into yang_02;

--循環(huán)插入數(shù)據(jù)

多余了 可以不要 前面有fetch了如果還有這里的話 就只能插入奇數(shù)行

其他沒什么問題了 還有你這個過程用ref cursor是浪費 沒必要用 用簡單的顯示游標(biāo)更好點

oracle 存儲過程 游標(biāo)

你游標(biāo)木有定義把,一般都是這樣寫的.還有你的列名是a1,前面加了個限定t是把?如果加限定的話,那在from后面的數(shù)據(jù)來源表,就需要標(biāo)明那個表是t.

vstr1 varchar2(100)

vstr2 varchar2(100)

declare r_cur cursor for select t.a1,t.a2 from abc t

open r_cur

fetch from r_cur into vstr1,vstr2

后面就是

while @@FETCH_STATUS = 0 .....等等不寫了。

反正游標(biāo)頭我都是那么寫,沒有問題。


名稱欄目:oracle如何存儲游標(biāo) oracle存儲過程定義游標(biāo)
文章起源:http://weahome.cn/article/hjshhg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部