小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Oracle PL/SQL開發(fā)基礎(chǔ)(第二十五彈:操縱游標(biāo)數(shù)據(jù))

 張小龍net館藏 2017-10-18

LOOP循環(huán)

如:

DECLARE
   dept_row dept%ROWTYPE;                      --定義游標(biāo)結(jié)果記錄變量
   CURSOR dept_cursor IS SELECT * FROM dept;   --定義游標(biāo)變量
BEGIN 
   OPEN dept_cursor;                           --打開游標(biāo)
   LOOP                                        --簡單循環(huán)
      FETCH dept_cursor INTO dept_row;         --提取游標(biāo)數(shù)據(jù)
      EXIT WHEN dept_cursor%NOTFOUND;          --退出循環(huán)的控制語句
      DBMS_OUTPUT.PUT_LINE('部門名稱:'||dept_row.dname);
   END LOOP;
   CLOSE dept_cursor;                          --關(guān)閉游標(biāo)
END;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

WHILE循環(huán)

如:

DECLARE
   dept_row dept%ROWTYPE;                      --定義游標(biāo)結(jié)果記錄變量
   CURSOR dept_cursor IS SELECT * FROM dept;   --定義游標(biāo)變量
BEGIN 
   OPEN dept_cursor;                           --打開游標(biāo)
   FETCH dept_cursor INTO dept_row;            --提取游標(biāo)數(shù)據(jù)   
   WHILE dept_cursor%FOUND  LOOP                 
      DBMS_OUTPUT.PUT_LINE('部門名稱:'||dept_row.dname);
      FETCH dept_cursor INTO dept_row;         --提取游標(biāo)數(shù)據(jù)         
   END LOOP;
   CLOSE dept_cursor;                          --關(guān)閉游標(biāo)
END;   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

游標(biāo)FOR循環(huán)

游標(biāo)FOR循環(huán)可以省去很多代碼,PL/SQL隱式地做了很多工作。
如:

DECLARE
   CURSOR dept_cursor IS SELECT * FROM dept;   --定義游標(biāo)變量
BEGIN 
   FOR dept_row IN dept_cursor LOOP            --在游標(biāo)FOR循環(huán)中檢索數(shù)據(jù)
     DBMS_OUTPUT.PUT_LINE('部門名稱:'||dept_row.dname);
   END LOOP;
END; 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

還能再簡單一點:

BEGIN 
   FOR dept_row IN (SELECT * FROM dept) LOOP    --在游標(biāo)FOR循環(huán)中檢索數(shù)據(jù)
     DBMS_OUTPUT.PUT_LINE('部門名稱:'||dept_row.dname);
   END LOOP;
END;   
  • 1
  • 2
  • 3
  • 4
  • 5

修改游標(biāo)數(shù)據(jù)

很多時候,從游標(biāo)檢索出來的數(shù)據(jù)要進行一些修改,比如更新游標(biāo)數(shù)據(jù)或?qū)τ螛?biāo)數(shù)據(jù)進行刪除。Oracle提供了方便的語法來處理游標(biāo)數(shù)據(jù)修改的操作:在游標(biāo)的聲明部分添加FOR UPDATE,然后在UPDATE或DELETE語句中添加WHERE CURRENT OF。

FOR UPDATE

FOR UPDATE會對用SELECT語句提取出來的結(jié)果進行鎖定,相當(dāng)于給結(jié)果集的行加了一把互斥鎖,實行行級鎖定。這樣其他的用戶會話就不能對當(dāng)前游標(biāo)行進行修改或刪除,直到整個事務(wù)被提交為止。
如:

DECLARE
   dept_row dept%ROWTYPE;                      --定義游標(biāo)結(jié)果記錄變量
   CURSOR dept_cursor IS SELECT * FROM dept FOR UPDATE deptno,dname;   --定義游標(biāo)變量
BEGIN 
   OPEN dept_cursor;                           --打開游標(biāo)
   FETCH dept_cursor INTO dept_row;            --提取游標(biāo)數(shù)據(jù)   
   WHILE dept_cursor%FOUND  LOOP                 
      DBMS_OUTPUT.PUT_LINE('部門名稱:'||dept_row.dname);
      FETCH dept_cursor INTO dept_row;         --提取游標(biāo)數(shù)據(jù)         
   END LOOP;
   CLOSE dept_cursor;                          --關(guān)閉游標(biāo)
END;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

WHERE CURRENT OF

在使用了FOR UPDATE鎖定了表中的行后,可以在UPDATE或DELETE語句中使用WHERE CURRENT OF來得到當(dāng)前游標(biāo)所檢索出來的行。
使用WHERE CURRENT OF檢索的游標(biāo)一定要有FOR UPDATE,并且游標(biāo)要被打開且至少返回一行,否則Oracle會觸發(fā)錯誤。
用法如:

DECLARE
   CURSOR emp_cursor (p_deptno IN NUMBER)
   IS
      SELECT  *
            FROM emp
           WHERE deptno = p_deptno
      FOR UPDATE;                              --使用FOR UPDATE子句添加互斥鎖
BEGIN
   FOR emp_row IN emp_cursor (20)              --使用游標(biāo)FOR循環(huán)檢索游標(biāo)
   LOOP
      UPDATE emp                      
         SET comm = comm * 1.12
       WHERE CURRENT OF emp_cursor;            --使用WHERE CURRENT OF更新游標(biāo)數(shù)據(jù)
   END LOOP;
   COMMIT;                                     --提交更改
END;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
DECLARE
   CURSOR emp_cursor (p_empno IN NUMBER)
   IS
      SELECT  *
            FROM emp
           WHERE empno = p_empno 
      FOR UPDATE;                              --使用FOR UPDATE子句添加互斥鎖
BEGIN
   FOR emp_row IN emp_cursor (7369)              --使用游標(biāo)FOR循環(huán)檢索游標(biāo)
   LOOP
    DELETE FROM emp
       WHERE CURRENT OF emp_cursor;            --使用WHERE CURRENT OF刪除游標(biāo)數(shù)據(jù)
   END LOOP;
END;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多