使用變數並不能完全滿足SQL語句嚮應用程式輸出數據的要求的,一組變數只能存放一條記錄,而查詢結果的記錄數是不確定的,所以才有了游標的概念。 基本原理 在PL/SQL中執行select、insert、update和delete語句時,oracle會在記憶體中分配上下文區,即一個緩衝區。而游標就是指向該區 ...
使用變數並不能完全滿足SQL語句嚮應用程式輸出數據的要求的,一組變數只能存放一條記錄,而查詢結果的記錄數是不確定的,所以才有了游標的概念。
基本原理
在PL/SQL中執行select、insert、update和delete語句時,oracle會在記憶體中分配上下文區,即一個緩衝區。而游標就是指向該區的一個指針。
游標分為顯式游標和隱式游標。
顯式游標是由用戶聲明和操作的一種游標;
隱式游標時Oracle為所有數據操縱語句自動聲明和操作的一種游標。
在每個用戶會話中,可以同時打開多個游標,其數量是由資料庫初始化參數文件中的OPEN CURSOR參數定義。
顯式游標
1.聲明游標
Cursor<游標名> is SELECT<語句>,游標必須在引用前被聲明,游標可以聲明在where子句中引用Pl/Sql變數,這些變數被認為是聯編變數,即已經被分配空間並映射到絕對地址的變數。
2.打開游標
OPEN<游標名>
打開游標執行select語句。執行完畢後,查詢結果存入記憶體,游標停在查詢結果的首部。
當打可以一個游標時,會完成以下幾件事情。
1)檢查聯編變數的取值
2)根據聯編變數的取值,確定活動集。
3)活動集的指針指向第一行
3.提取游標
打開游標後的工作就是取值了,取值語句是fetch,用法如下:
fetch<游標名> into <變數列表>或者fetch<游標名> into pl/sql記錄
fetch語句每執行一次,游標向後移動一行,直到結束(游標只能逐個向後移動,而不能跳躍移動或者向前移動)
4.關閉游標
當所有的活動集都被檢索以後,游標就應該被關閉。pl/sql程式將被告知對於游標的處理已經結束,與游標相關聯的資源可以被釋放了。
close<有標明>,游標關閉後不能從游標取數據了,會報如下錯誤: