国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

PL/SQL的SELECT FOR UPDATE游標(biāo)

2024-07-21 02:34:35
字體:
供稿:網(wǎng)友

  在多數(shù)情況下,提取循環(huán)中所完成的處理都會修改由游標(biāo)檢查出的行,PL/SQL提供了進(jìn)行這樣處理的一種語法。
  這種語法包括兩部分——在游標(biāo)聲明部分的FOR UPDATE子句和在UPDATE或DELETE語句中的WHERE CURRENT OF 子句。
  通常,SELECT操作將不會對正處理的行執(zhí)行任何鎖定設(shè)置,這使得連接到該數(shù)據(jù)庫的其他會話可以改變正在選擇的數(shù)據(jù)。
  但是,結(jié)果集仍然是一致性的。當(dāng)確定了活動集以后,在執(zhí)行OPEN的時刻,Oracle會截取下該表的一個快照。在此時刻以前所提交的任何更改操作都會在活動集中反映出來。在此時刻以后所進(jìn)行的任何更改操作,即使已經(jīng)提交了它們,都不會被反映出來,除非將該游標(biāo)重新打開。但是使用FOR UPDATE子句,在OPEN返回以前的活動集的相應(yīng)行上會加上互斥鎖,這些鎖會避免其他的會話對活動集中的行進(jìn)行更改。直到整個事務(wù)被提交為止。
  
  示例:
  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語句僅更新在游標(biāo)聲明的FOR UPDATE子句處列出的列。假如沒有列出任何列,那么所有的列都可以更新。
  2、示例中的COMMIT是在提取循環(huán)完成以后才完成的,因為COMMIT將釋放由該會話持有的所有鎖。因為FOR UPDATE子句獲得了鎖,所以COMMIT將釋放這些鎖。當(dāng)鎖釋放了,該游標(biāo)就無效了。所以后繼的提取操作都將返回ORACLE錯誤。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 新宁县| 司法| 房产| 志丹县| 永丰县| 车致| 泰兴市| 松滋市| 延津县| 天镇县| 瑞安市| 陆川县| 谢通门县| 崇明县| 漳浦县| 怀远县| 富源县| 远安县| 台南县| 阿拉尔市| 林芝县| 宣城市| 永寿县| 通山县| 随州市| 三门县| 漳平市| 苏尼特右旗| 浦江县| 肥乡县| 广宗县| 民乐县| 西充县| 渝中区| 南和县| 绍兴市| 许昌县| 姚安县| 镇巴县| 南充市| 靖江市|