嗨 甲骨文【2】
來源:互聯網
上載者:User
/************************************************
我與遊標
/************************************************
使用顯式遊標
定義遊標DECLARE
CURSOR cursor_name IS select_statement;
開啟遊標OPEN
OPEN cursor_name
提取遊標FETCH
FETCH cursor_name INTO variable1,variable2,...;
關閉遊標CLOSE
CLOSE cursor_name;
顯式遊標屬性
%ISOPEN判斷是否已經開啟 開啟TRUE
%FOUND是否從結果集中提取到了資料 提取到TRUE
%NOTFOUND是否從結果集中提取到了資料 沒有提取到TRUE
%ROWCOUNT返回到當前行為止已經提取到的實際行數
參數遊標
以實現使用不同參數值多次開啟遊標時,可以產生不同的結果集
CURSOR cursor_name(parameter_name datatype) IS select_statement;
使用遊標更新/刪除資料
CURSOR cursor_name(parameter_name datatype) IS select_statement FOR UPDATE [OF column_reference] [NOWAIT];
FOR UPDATE用於在結果集資料上加行共用鎖定,以防止其他使用者再次行執行DML操作
OF確定那些表要加鎖
NOWAIT指定執行時不等待鎖,如果其他會話已經在被作用行上加鎖,則當前會話顯示錯誤提示
UPDATE table_name SET column=.. WHERE CURRENT OF cursor_name;
DELETE table_name WHERE CURRENT OF cursor_name;
遊標迴圈
Oracle會隱含地開啟遊標,提取遊標並關閉遊標
FOR record_name IN cursor_name LOOP
statement1;
statement2;
...
END LOOP;
如果迴圈時不需要使用任何遊標屬性,則可直接使用子查詢
FOR record_name IN (select_statement) LOOP
statement1;
statement2;
...
END LOOP;
使用遊標變數
定義REF CURSOR類型和遊標變數
TYPE ref_type_name IS REF CURSOR [RETURN return_type];
cursor_variable ref_type_name;
開啟遊標
OPEN cursor_variable FOR select_statement;
提取遊標資料
FETCH cursor_variable INTO variable1,variable2,...;
關閉遊標CLOSE
CLOSE cursor_variable