sql 中CURSOR 的使用
sql 中CURSOR 的使用http://www.bieryun.com/3273.html
CURSOR是游標,常用于腳本處理。
這里主要介紹自己常用的方法,同時也會把網上的一般格式進行解釋。
一、游標一般格式:
DECLARE 游標名稱 CURSOR FOR SELECT 字段1,字段2,字段3,... FROM 表名 WHERE ...
OPEN 游標名稱
FETCH NEXT FROM 游標名稱 INTO 變量名1,變量名2,變量名3,...
WHILE @@FETCH_STATUS=0
BEGIN
SQL語句執行過程... ...
FETCH NEXT FROM 游標名稱 INTO 變量名1,變量名2,變量名3,...
END
CLOSE 游標名稱
DEALLOCATE 游標名稱 (刪除游標)
一般格式sql舉例如下:
[sql] view plain copy
其中while循環的判斷條件:
@@FETCH_STATUS =0 ? FETCH 語句成功
@@FETCH_STATUS =-1 FETCH 語句失敗或此行不在結果集中
@@FETCH_STATUS =-2 被提取的行不存在
二、我常用的一般格式:
DECLARE 游標名稱 CURSOR FOR SELECT * FROM 表名 WHERE ...
begin
dbms_output.enable(buffer_size=>null);
for 變量名 in 游標名稱 loop
SQL語句執行過程... ... 獲取游標里的值 直接用 變量名.字段名
END LOOP;
CLOSE 游標名稱
DEALLOCATE 游標名稱 (刪除游標)
三、嵌套循環:
案例: 紅色部分是對于第二點常用格式上的添加,使得可以在循環中嵌套循環
declare TYPE daynamic_cursor_type IS REF CURSOR; --黃色部分自定義 cursor bscl_mc_cur is SELECT d.bscl_mc FROM DB_YWBZ.ecm_bscl_common_content_data@db_ywbz_sc_old d WHERE d.bscl_mc is not null group by d.bscl_mc; cur_zj_rows daynamic_cursor_type; --定義游標 v_sql varchar2(500); v_zj varchar2(10); begin dbms_output.enable(buffer_size=>null); for v_bscl_mc_cur in bscl_mc_cur loop v_sql := 'SELECT zj,ZJ_DM FROM ecm_bscl_common_content_data d WHERE d.bscl_mc = '||chr(39)||v_bscl_mc_cur.bscl_mc||chr(39); --引號,記得加 dbms_output.put_line('=========='||v_bscl_mc_cur.bscl_mc); open cur_zj_rows for v_sql; LOOP FETCH cur_zj_rows INTO v_zj; --獲取值 EXIT WHEN cur_zj_rows%NOTFOUND; --判斷是否存在值 dbms_output.put_line(v_zj); --操作 END LOOP; end loop; end;總結
以上是生活随笔為你收集整理的sql 中CURSOR 的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 五节点HadoopHA安装教程
- 下一篇: Confluence 6 索引支持的语言