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

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

PL/SQL游標詳解

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

在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的專業知識,幫助我們開拓新的知識體系,展開對新知識和新事物的探究和學習。

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 日韩免费福利视频 | 在线免费一级片 | 色偷偷人人澡久久天天 | 亚洲精品人成网在线播放影院 | 欧美亚洲国产精品 | 欧美色噜噜 | 日本在线一区二区三区 | 免费一级毛片女人图片 | 欧美精品国产精品 | 一区二区三区免费精品视频 | yy4080午夜理论一级毛片 | 男人女人真曰批视频大全免费观看 | 日韩精品无码一区二区三区 | 播放黄色一级片 | 亚洲免费在线 | 人人做| 一级a毛片免费 | www.91成人| 永久免费av网站 | 国产一级片免费 | 欧美黑白配性xxxxx | 老年人黄色一级片 | 中国国产一国产一级毛片视频 | 久久女同互慰一区二区三区 | 国产高清一区二区三区四区 | 天天操夜夜操美女 | 国产中文字幕久久 | 黄视频网站免费 | 亚洲欧美日韩中文字幕在线一 | 猫色网站| 国产欧美乱码在线看 | 男女下面进视频免费 | 国产在线一区二区三区四区 | 最近的最新的中文字幕在线 | 亚洲福利一区二区三区 | 无码中文字幕日韩专区 | 国产超级乱淫视频播放 | 亚洲国产成人影院播放 | 一级特黄aa毛片免费观看 | 中国国产一级毛片 | 国产1024一区二区你懂的 |