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

首頁 > 開發 > 綜合 > 正文

[原創]PL/SQL的SELECT FOR UPDATE游標

2024-07-21 02:39:34
字體:
來源:轉載
供稿:網友

在多數情況下,提取循環中所完成的處理都會修改由游標檢查出的行,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錯誤。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 昌吉市| 沁阳市| 濉溪县| 南雄市| 金堂县| 忻州市| 灵丘县| 且末县| 贵溪市| 青神县| 南和县| 原平市| 九寨沟县| 万载县| 土默特右旗| 阿拉善右旗| 喀喇沁旗| 噶尔县| 武夷山市| 深水埗区| 宜章县| 赞皇县| 五河县| 剑阁县| 海伦市| 民权县| 儋州市| 苍溪县| 河池市| 扶绥县| 漳平市| 张家港市| 无为县| 三门峡市| 石首市| 邢台市| 通州市| 京山县| 彭山县| 泽库县| 濮阳县|