国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

在PL/SQL使用游標獲取數據及動態SQL

2019-11-15 00:50:57
字體:
來源:轉載
供稿:網友
在PL/SQL使用游標獲取數據及動態SQL

1.游標概念:

當在PL/SQL塊中執行DML(增刪改)時,Oracle會為其分配上下文區(Context Area),游標是指向上下文區的指針

2. 游標分類:

A. 隱式游標

a. 在PL/SQL中使用DML語句時自動創建隱式游標

b. 隱式游標自動聲明、打開和關閉,其名為 SQL

c. 通過檢查隱式游標的屬性可以獲得最近執行的DML 語句的信息

d. 隱式游標的屬性有:

%FOUND – SQL 語句影響了一行或多行時為 TRUE

%NOTFOUND – SQL 語句沒有影響任何行時為TRUE

%ROWCOUNT – SQL 語句影響的行數

%ISOPEN - 游標是否打開,始終為FALSE

e. 隱式游標的錯誤處理:NO_DATA_FOUND:沒有查詢到任何行。TOO_MANY_ROWS:返回多行。

B. 顯式游標

a. 顯式 游標的使用步驟:

1) 聲明顯式游標語法:

CURSOR 游標名[(游標參數列表)] [RETURN 返回值規范] IS SELECT 語句 [FOR UPDATE OF [列名列表]];

2) 打開顯式游標語法:

OPEN 顯式游標名 (參數列表);

3) 提取數據語法:

FETCH 游標名 INTO 記錄或變量列表;

4) 關閉游標語法:

CLOSE 游標名;

b. 顯式游標屬性

顯式游標名%屬性

%FOUND – SQL 語句影響了一行或多行時為 TRUE

%NOTFOUND – SQL 語句沒有影響任何行時為TRUE

%ROWCOUNT – SQL 語句影響的行數

%ISOPEN - 游標是否打開,始終為FALSE

3. 循環游標 :

用于簡化游標處理代碼、當用戶需要從游標中提取所有記錄時使用

循環游標的語法如下:

FOR <record_index> IN <cursor_name>

LOOP

<executable statements>

END LOOP;

4. BULK COLLECT

為什么要使用BULK COLLECT?

提交PL/SQL中SELECT語句的查詢效率。

原理:減少了PL/SQL與SQL引擎之間的開關次數,因而加速了數據獲取的速度

語法:

... BULK COLLECT into 集合

5. REF 游標和游標變量:用于處理運行時動態執行的 SQL 查詢

使用游標變量的步驟:

A. 創建游標變量需要兩個步驟:

a. 聲明 REF 游標類型

b. 聲明 REF 游標類型的變量

用于聲明 REF 游標類型的語法為:

TYPE <ref_cursor_name> IS REF CURSOR [RETURN <return_type>];

用于聲明REF 游標類型變量的語法:變量名 游標類型名;

B. 打開游標變量的語法如下:

OPEN cursor_name FOR select_statement;

C. 提取數據語法:

a. FETCH 游標變量名 INTO 接收游標數據的變量 &hellip;…;

b. FETCH 游標變量名 INTO 接收游標結果的集合變量 ….[LIMIT rows];

D. 關閉游標變量語法:CLOSE 游標變量名 ;

6. 游標變量的優點和限制

A. 游標變量的優點有:

a. 可從不同的 SELECT 語句中提取結果集

b. 可以作為過程的參數進行傳遞

c. 可以引用游標的所有屬性

d. 可以進行賦值運算

B. 使用游標變量的限制:

a. 不能在程序包中聲明游標變量

b. FOR UPDATE子句不能與游標變量一起使用

c. 不能使用比較運算符

7. 動態SQL概述

A. 綁定

a. 編譯器識別程序中的標識符存儲位置的過程。

b. 分類:早期綁定與晚期綁定

B. 動態 SQL 是指在PL/SQL程序執行時生成的 SQL 語句

C. DDL 語句命令和會話控制語句不能在 PL/SQL 中直接使用,但是可以通過動態 SQL 來執行

D. 兩種動態SQL技術

a. DBMS_SQL包:Oracle 8i以前使用。

b. 本地動態SQL:Oracle 9i以后使用。

對比:本地動態SQL更簡單、執行更快。

E. 執行動態SQL

a. 語法1:execute immediate 'sql語句字符串'

b. 語法2:open x for 'sql語句字符串'

8. 綁定變量

A. 為什么使用綁定變量:減少編譯SQL的次數,提交執行效率

B. 綁定變量說明

execute immediate

'insert into t1(f1,f2) values(:a,:b)' using x,y;

注意: using后面的變量與綁定變量根據位置一一對應。 x-->a、y-->b

C. 綁定變量的使用

a. 在SQL*PLUS(命令窗口) 中使用綁定變量

只能在SQL*PLUS交互環境下使用。

b. 在PL/SQL(存儲過程和函數)中使用綁定變量

參數引用的已經是綁定變量。

c. 在動態SQL中使用綁定變量

只能綁定字面量(替換具體的值)

不能替換數據庫對象名稱

d. 在JDBC中使用綁定變量

PReparedStatement對象

9. 動態SQL語法

語法1:execute immediate 'sql語句字符串'

語法2:open for 'sql語句字符串'


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 横山县| 兴山县| 布尔津县| 历史| 肥东县| 鸡西市| 三门县| 奉贤区| 大厂| 肥城市| 拉萨市| 正阳县| 布尔津县| 都安| 嘉荫县| 兰溪市| 大名县| 临江市| 固阳县| 林口县| 嘉峪关市| 霍城县| 洱源县| 凌云县| 屏南县| 兴隆县| 图木舒克市| 团风县| 突泉县| 惠州市| 烟台市| 龙里县| 昌平区| 楚雄市| 麦盖提县| 大化| 隆回县| 即墨市| 辽宁省| 仁布县| 宣化县|