---- 第五章 pl/sql游標 ----
1. 游標(cursor)
游標是從資料表中提取出來的資料,以臨時表的形式存放在記憶體中,在游標中有乙個數
據指標,在初始狀態下指向的是首記錄,利用 fetch 語句可以移動該指標,從而對游標中的數
據進行各種操作,然後將操作結果寫回資料表中。
1)分類: a)顯式游標:程式設計師可以操作控制,是針對select 語句的,指向select 語句的結束集
b)隱式游標:程式設計師不可控制,但可以有限制的應用
2)作用:用於處理查詢語句的結果,提取多行資料集;
3)使用步驟:
a) 宣告游標:
a. 普通申明: delcare
v_emp s_emp%rowtype;
v_did s_dept.id%type;
cursor cur_emp is select * from s_emp where dept_id =v_did;
/* cursor的內容必須是一條查詢語句 */
b. 帶引數申明:delcare
cursor c_emp(v_did s_emp.id%type) select * from s_emp where dept_id = v_did;
b) 為查詢開啟游標:
open cur_emp; /* 相當於執行select語句,且把執行結果存入cursor;
c) 從游標中取結果,存入pl/sql變數中:
a. fetch cur_emp into var1, var2, ...(變數名 1, 變數名 2,.......); /* 變數的數量、型別、順序要和table中欄位一致; */
b. fetch cur_emp into record_var(記錄型變數名);
注:將值從cursor取出放入變數中,每fetch一次取一條記錄;
d) 關閉游標:
close cur_emp;
注:a. 游標使用後應該關閉;
b. 關閉後的游標不能fetch和再次close;
c. 關閉游標相當於將記憶體中cursor的內容清空;
2. 游標的屬性
游標名%屬性名
1) %found: 是否有值; 有則返回true,否則返回false;
2) %notfound: 是否沒有值; 如果沒有值則返回true,否則返回false;
3) %isopen: 是否是處於開啟狀態; 處於開啟狀態就返回true,否則返回false;
4) %rowcount: cursor當前的記錄號(當前游標的指標位移量,表示在此之前,游標所處理的資料量(多少條記錄));
3. 游標的fetch迴圈
1) loop fetch 游標名 into 定義的變數
exit when 游標名%notfound; /* 當游標沒取道記錄後退出 要及時的做出判斷 */
end loop;
2) while 游標名%found loop fetch 游標名 into 定義的變數;
end loop;
3) for 儲存資料的變數(不用事先定義,是根據游標宣告的時候select 的型別來確定)
in 游標名 loop (fetch 游標名 into ...)
(可以不用fetch 語句)
end loop;
4.帶引數的游標cursor
declare
v_emp s_emp%rowtype
cursor cur_emp(p_did s_emp.dept_id%type) is /* 定義引數p_did的型別 */
select * from s_emp where dept_id= p_did
for update of salary; /*for update of salary; 加行級鎖,在我修改這些資料的時候,
*其他人無法修改資料,直到游標被close後 */
begin
open cur_emp(31); /*帶的引數值 31 就是賦給引數p_did 的 */
loop
fetch cur_emp into v_emp;
exit when cur_emp%notfound;
dbms_output.put_line(v_emp.id||' '||v_emp.first_name);
end loop;
close cur_emp;
end
c primer 筆記,第五章
case標籤必須是整型常量表示式 在case語句中,不允許跨過變數的初始化語句直接跳轉到該變數作用域內的另乙個位置 在範圍for語句中,預存了end 的值,一旦在序列中新增 刪除 元素,end函式的值就可能變得無效了 尋找處理 的過程域函式呼叫鏈剛好相反,是沿著程式的執行路徑逐層回退,直到找到適當型...
C primer plus 第五章筆記
因為迴圈體必須是一條語句,但是使用過程中,多條語句也是不可避免的。因此就可以將多條語句,利用一對花括號來構造一條復合語句 也稱為 塊,block 從而只被視為一條語句。但是復合語句還有一種有趣的特性。如果在復合語句中定義乙個新的變數,則僅當程式執行該復合語句中的語句時,該變數才存在,但復合語句執行完...
SQL筆記 5 第五章 運算元據
第五章 運算元據 insert 1.把資料插入到表 全部列 insert into table name values value1 value2 null 2.把資料插入到表 指定列 insert into table name column1 column2 values value1 valu...