kapok

          垃圾桶,嘿嘿,我藏的這么深你們還能找到啊,真牛!

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            455 隨筆 :: 0 文章 :: 76 評論 :: 0 Trackbacks

          在多數情況下,提取循環中所完成的處理都會修改由游標檢查出的行,PL/SQL提供了進行這樣處理的一種語法。
          這種語法包括兩部分——在游標聲明部分的FOR UPDATE子句和在UPDATE或DELETE語句中的WHERE CURRENT OF 子句。
          通常,SELECT操作將不會對正處理的行執行任何鎖定設置,這使得連接到該數據庫的其他會話可以改變正在選擇的數據。
          但是,結果集仍然是一致性的。當確定了活動集以后,在執行OPEN的時刻,ORACLE會截取下該表的一個快照。在此時刻以前所提交的任何更改操作都會在活動集中反映出來。在此時刻以后所進行的任何更改操作,即使已經提交了它們,都不會被反映出來,除非將該游標重新打開。但是使用FOR UPDATE子句,在OPEN返回以前的活動集的相應行上會加上互斥鎖,這些鎖會避免其他的會話對活動集中的行進行更改。直到整個事務被提交為止。

          示例:
          DECLARE
          CURSOR C_CUR IS SELECT * FROM STUDENDS FOR UPDATE OF XM;
          BEGIN
          OPEN C_CUR;
          WHILE C_CUR%FOUND LOOP

          UPDATE STUDENDS SET XM='AA'||XM WHERE CURRENT OF C_CUR;

          END LOOP;
          CLOSE C_CUR;
          COMMIT;
          END;


          需要注意的是:1、UPDATE語句僅更新在游標聲明的FOR UPDATE子句處列出的列。如果沒有列出任何列,那么所有的列都可以更新。
          2、示例中的COMMIT是在提取循環完成以后才完成的,因為COMMIT將釋放由該會話持有的所有鎖。因為FOR UPDATE子句獲得了鎖,所以COMMIT將釋放這些鎖。當鎖釋放了,該游標就無效了。所以后繼的提取操作都將返回ORACLE錯誤。
          posted on 2005-03-08 22:13 笨笨 閱讀(3512) 評論(4)  編輯  收藏 所屬分類: ALLOracle

          評論

          # re: oracle的select for update 2006-11-15 13:02 付羽
          我是一個中國人,是一個外像的人,想交很多朋友,國外的朋友,只是沒要會出國,希望我能如交到朋友.  回復  更多評論
            

          # re: oracle的select for update 2007-05-15 11:22 virtualf
          不是中國人吧?!
            回復  更多評論
            

          # re: oracle的select for update 2007-06-25 09:23 www
          他都說了,只是外面像人而已,是一個外像的人  回復  更多評論
            

          # re: oracle的select for update 2007-11-06 21:00 sss
          我是一個中國人,是一個外像的人,想交很多朋友,國外的朋友,只是沒要會出國,希望我能如交到朋友.


          一句話里有N多錯誤,話都不會說還想出國!外像人  回復  更多評論
            

          主站蜘蛛池模板: 紫阳县| 江西省| 灌云县| 合江县| 张掖市| 龙里县| 开原市| 玛纳斯县| 武汉市| 思茅市| 晋宁县| 大厂| 汉阴县| 德钦县| 贺州市| 驻马店市| 崇义县| 界首市| 化德县| 山西省| 临洮县| 孝感市| 龙江县| 丽江市| 高唐县| 太康县| 砀山县| 大英县| 汪清县| 米林县| 克山县| 高要市| 磐安县| 营山县| 津南区| 二连浩特市| 彭水| 中宁县| 灵璧县| 莲花县| 嘉定区|