zoukankan      html  css  js  c++  java
  • oracle pl/sql之使用游标变量更新数据库

    前情提要:

          使用游标或游标变量不但能够对数据进行查询,同样也可以对数据进行更新。使用游标对数据进行更新是指在游标定位下,修改或删除表中指定的数据行。为了实现使用游标更新数据,需要在声明游标的时候使用FOU UPDATE,以便在打开游标时锁定游标结果集与表中对应数据行的所有列和部分列

    为了保证正在进行操作的数据不被另外的用户修改,Oracle提供了一个for update选项来对所选择的行进行锁住。使用for update选项后声明游标的语法形式如下:

    cursor cursr_name is select语句 for update[of column[,column]] [nowait]

    其中,of子句用来指定要锁定的列,如果忽略了of子句,那么表中选择的数据行都将被锁定。如果这些数据行已经被其他用户锁定,那么正常情况下,for update操作会一直等到该用户释放对这些行的锁定后才继续自己的操作。对于这种情况,可使用nowait子句,这时,如果这些行被另一用户的操作锁定,则open 立即返回并给出错误提示。

    当使用了 fou update声明游标后,可在delete和update语句中使用where current of子句,修改或删除游标结果集中当前行对应的表中的数据行

    where{current of cursor_name| serarch_condition}

    程序演示:

    declare
    cursor my_cursor is select * from emp for update of sal nowait;
    v_sal pls_integer;
    begin
    for r in my_cursor loop
    if r.sal<3000 then
    update emp set sal=sal+200 where current of my_cursor;
    end if;
    end loop;

    end;

  • 相关阅读:
    【1】BIO与NIO、AIO的区别
    BIO | NIO | AIO (Java版)
    Java NIO 机制分析(一) Java IO的演进
    AbstractQueuedSynchronizer同步队列与Condition等待队列协同机制
    【1】【JUC】Condition和生产者消费者模型
    【JUC】JDK1.8源码分析之CyclicBarrier
    常用排序,查找,树算法集锦
    AFNetworking
    ios推送服务,php服务端
    如何使用subversion管理iOS源代码
  • 原文地址:https://www.cnblogs.com/ztyy04126/p/4901116.html
Copyright © 2011-2022 走看看