国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 亳州市| 南昌市| 石城县| 买车| 阜城县| 瑞丽市| 五常市| 台东市| 上高县| 调兵山市| 贡山| 宜黄县| 南宁市| 滦南县| 稷山县| 财经| 临湘市| 会理县| 河池市| 寿宁县| 苏尼特右旗| 出国| 丹寨县| 桦甸市| 广河县| 武宁县| 阳城县| 金塔县| 珠海市| 齐齐哈尔市| 同江市| 华蓥市| 浦县| 龙州县| 绵竹市| 嘉义县| 历史| 肇庆市| 辽宁省| 红桥区| 吐鲁番市|