黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 PL/SQL游標詳解

PL/SQL游標詳解

更新時間:2021-03-16 17:22:04 來源:動力節點 瀏覽1253次

在PL/SQL中,針對多行多列的數據類型,可以使用游標變量。當在PL/SQL中執行SELECT, INSERT, UPDATE, DELETE語句時,Oracle服務器會為這些語句分配相應的上下文區域(Context Area),Oracle使用該上下文區域解析和處理相應的SQL語句。PL/SQL游標就是指向該上下文區域的指針,通過該指針,開發者可以獲取語句的執行狀態,還可以對查詢語句返回的多條記錄進行逐條的訪問和處理。

1、PL/SQL游標的基本操作

游標包括兩種游標:隱含游標和顯式游標。隱含游標用于處理SELECT INTO和DML語句,而顯式游標則專門用于處理SELECT語句返回的多行數據。

游標的基本操作有:聲明游標、打開游標、提取游標和關閉游標。

下面的代碼塊展示了這四個基本操作:

DECLARE

????CURSOR c_emp IS SELECT * FROM EMP; --聲明游標

????emp_record emp%ROWTYPE;BEGIN

????OPEN c_emp; --打開游標 ???LOOP

????????FETCH c_emp INTO emp_record; --提取游標

????????DBMS_OUTPUT.PUT_LINE('雇員名稱:'||emp_record.ename);

????EXIT WHEN c_emp%NOTFOUND;

????END LOOP;

????CLOSE c_emp; --關閉游標END;/

2、PL/SQL游標屬性

游標作為一個臨時表,可以通過游標的屬性來獲取游標狀態。游標有4個常用的屬性:

1)%ISOPEN:用于判斷游標是否已經打開

2)%FOUND:用于判斷游標是否找到記錄

3)%NOTFOUND:與%FOUND相反.

4)%ROWCOUNT:返回到當前為止已經提取到的實際行數.

3、參數化游標

參數化游標是指帶有參數的游標,在定義了參數游標之后,當使用不同的參數值多次打開游標時,可以生成不同的結果集。參數化游標的聲明語法如下:

CURSOR cursor_name(parameter) IS SELECE ...

Example:參數化游標的使用

DECLARE

????CURSOR emp_cursor(dno NUMBER) IS

????SELECT ename FROM emp WHERE deptno=dno;

????v_ename emp.ename%TYPE;BEGIN

????OPEN emp_cursor(10);

????LOOP

????????FETCH emp_cursor INTO v_ename;

????????EXIT WHEN emp_cursor%NOTFOUND;

????????DBMS_OUTPUT.PUT_LINE(v_ename);

????END LOOP;

????CLOSE emp_cursor;END;/

4、隱式游標就是指非PL/SQL程序中定義的,而且是在PL/SQL中使用UPDATE、DELETE或SELECT INTO語句時,Oracle系統自動分配的游標。隱式游標名稱固定為SQL。隱式游標無須聲明和打開,使用完后也不用關閉,所有這一切都由系統自動維護。

Example:SELECT INTO的隱式游標

 

DECLARE

????v_emp emp%ROWTYPE;BEGIN

????SELECT * INTO v_emp FROM emp WHERE empno=7788;

????IF SQL%FOUND THEN

????????DBMS_OUTPUT.PUT_LINE('7788的雇員名稱:'||v_emp.ename);

????END IF;END;/

Example:UPDATE的隱式游標

BEGIN

????UPDATE emp SET ename='SCOTT' WHERE empno=7788;

????IF SQL%FOUND THEN

????????DBMS_OUTPUT.PUT_LINE('更新成功!');

????END IF;END;/

5、使用PL/SQL游標更新或刪除數據

通過使用顯式游標,不僅可以一行一行地處理SELECT語句的結果,而且也可以更新或刪除當前游標行的數據。在使用游標更新或刪除數據時有兩點需要注意的地方:

聲明游標是必須帶有FOR UPDATE子句,如:

CURSOR cursor_name IS SELECT ... FOR UPDATE

在提取了游標數據之后,為了更新或刪除當前游標行數據,必須在UPDATE或DELETE語句中引用WHERE CURRENT OF子句。如:

UPDATE table_name SET column=... WHERE CURRENT OF cursor_name;DELETE table_name WHERE CURRENT OF cursor_name;

Example:使用游標更新數據

DECLARE

????CURSOR emp_cursor IS SELECT ename,sal FROM emp FOR UPDATE;

????v_ename emp.ename%TYPE;

????v_sal emp.sal%TYPE;BEGIN

????OPEN emp_cursor;

????LOOP

????????FETCH emp_cursor INTO v_ename,v_sal;

????????EXIT WHEN emp_cursor%NOTFOUND;

????????IF v_sal<2000 THEN

????????????UPDATE emp SET sal=sal+100 WHERE CURRENT OF emp_cursor;

????????END IF;

????END LOOP;

????CLOSE emp_cursor;END;/

6、PL/SQL游標FOR循環

當使用游標FOR循環時,Oracle會隱含地打開游標、提取游標數據并關閉游標。

Example:使用游標FOR循環

DECLARE

????CURSOR emp_cursor IS SELECT * FROM emp;

????v_emp emp%ROWTYPE;BEGIN

????FOR v_emp IN emp_cursor LOOP

????????DBMS_OUTPUT.PUT_LINE('第'||emp_cursor%ROWCOUNT||'個雇員'||v_emp.ename);

????END LOOP;END;/

Example: 在游標FOR循環中直接使用子查詢

DECLARE

????v_emp emp%ROWTYPE;BEGIN

????FOR v_emp IN (SELECT * FROM EMP) LOOP

????????DBMS_OUTPUT.PUT_LINE('編號'||v_emp.empno||'的雇員名稱:'||v_emp.ename);

????END LOOP;END;/

7、PL/SQL游標變量

上面提到的顯式游標和隱式游標都與固定的查詢語句相關聯,所以稱之為靜態游標。游標變量與靜態游標不同,它是一種動態游標,在運行期間可以與不同的查詢語句相關聯。

要聲明游標變量,首先得創建一個游標數據類型,創建游標數據類型的語法如下:

TYPE cursor_data_type_name IS REF CURSOR [RETURN return_type];

 Example:操作游標變量

DECLARE

????TYPE emp_cursor_type IS REF CURSOR RETURN emp%ROWTYPE;

????emp_cursor emp_cursor_type;

????emp_record emp%ROWTYPE;BEGIN

????IF NOT emp_cursor%ISOPEN THEN

????????OPEN emp_cursor FOR SELECT * FROM emp WHERE deptno=10;

????END IF;

????LOOP

????????FETCH emp_cursor INTO emp_record;

????????EXIT WHEN emp_cursor%NOTFOUND;

????????DBMS_OUTPUT.PUT_LINE('雇員名:'||emp_record.ename);

????END LOOP;END;/

本文非常全面的介紹了PL/SQL游標的各種操作,幫助我們有效的掌握PL/SQL游標的相關知識。在本站的PL/SQL教程中還涉及到了其他的PL/SQL的專業知識,幫助我們開拓新的知識體系,展開對新知識和新事物的探究和學習。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 999精品久久久中文字幕蜜桃 | 一本久道久久综合多人 | 欧美福利网站 | 波多野吉衣在线多野结衣 | 火辣福利视频 | 夭天曰天天躁天天摸在线观看 | 日韩成人在线免费视频 | 午夜宅男宅女的免费网站 | 中文字幕在线播放 | 欧美亚洲韩国 | 欧美第一页在线 | 亚洲 中文 欧美 日韩 在线人 | 亚洲欧美影院 | 中文字幕丝袜制服 | 国产日韩精品一区二区在线观看 | 天天综合天天做天天综合 | 激情午夜 | 国产成人精品三级在线 | 国产盗摄一区二区欧美精品 | 免费看黄色网址 | 鸥美性生交xxxxx久久久 | 日韩美三级 | 5060网午夜| 男人和女人日批视频 | 在线视频免费观看a毛片 | 中文在线观看永久免费 | 高h喷水荡肉爽文各种场合 高h喷水荡肉爽文np欲 | 爱呦视频在线播放网址 | 欧美激情在线精品video | 操操干| 免费一看一级毛片全播放 | 亚洲国产婷婷综合在线精品 | 一区精品在线 | 日韩欧美在线一级一中文字暮 | 羞羞视频免费网站com | 欧美在线观看一区二区三 | 日韩精品a在线视频 | 特级黄a三级三级三级 | 亚洲综合在线观看一区www | 在线亚洲欧国产精品专区 | 免费视频淫片aa毛片 |