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 in
loop
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 is ref cursor [return ];
用於宣告ref 游標型別變數的語法:變數名 游標型別名;
b. 開啟游標變數的語法如下:
open cursor_name for select_statement;
c. 提取資料語法:
a. fetch 游標變數名 into 接收游標資料的變數 ……;
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語句字串'
PL SQL 引用游標的使用
使用引用游標的情景 1.你可能有這樣的需求 讓乙個函式返回乙個游標,然後宿主函式呼叫並使用這個游標 2.open cursor name for v sql statement 當時用動態sql進行多行查詢時,因為此處的cursour name必須是乙個游標變數,所以需要使用。h還可檢視例子 cre...
pl sql 使用游標屬性,案例
使用游標 1 顯示游標 cursor name cursor is select statement 2 開啟游標 open name cursor 3 提取游標 fetch name cursor into variable1,variable2.4 關閉游標 close name cursor ...
顯示游標獲取資料 PL SQL
在oracle中,當我們從pl sql中執行一條select語句時,oracle rdbms 關聯式資料庫管理系統 會為該語句在sga的共享池中分配乙個私有sql區,同時在將查詢結果集放入系統全域性區sga中,以提高訪問和修改結果集的效能。私有sql區包含了該語句的資訊以及結果集的資訊。oracle...