第4章Oracle 在PL/SQL中更改数据和管理事物

DML操作的游标属性

游标:

       在Oracle中作为指针来引用该私有工作区
 隐式游标:
       执行一个SQL DML语句(insert、update、delete)以及返回单行的select into时,PL/SQL都会声明和管理一个隐式游标,这种类型的游标就称为隐式的游标。
隐式游标的属性:

         SQL%FOUND  ------如果记录成功获取,返回true;否则就返回false
                   例:
                          begin
                                  update emp set sal = 3100 where enpno = 7788;
                                   if sql%found then
                                         dbms_output.put_line('记录修改成功');
                                     end if ;
                           end;                                    
         SQL%NOTFOUTD -----如果记录获取失败,返回true;否则就返回false
                    例:
                           begin
                                   delete from emp where sal >= 2000;
                                     if SQL%FOUND then
                                       dbms_output.put_line('被开除的高薪员工有' || SQL%ROWCOUNT ||‘人’);
                                     end if;
                             end;
         SQL%ROWCOUNT-----返回从游标中获取的记录数、

2. DML语句的RETURNING字句

例:
      declare
                 v_name varchar(50);
      begin
                 for col in (select empno, ename from emp) loop;
                       update emp set ename = 'temp' where empno = col.empno
                  retuening ename into v_name;
                  dbms_output.put_line();
                 end loop;
      end;

3. 事物、事物的回滚与提交

1. 原子性
       事物不是一个可以分割的单元
 2. 一致性
       事物必须使系统从一个一致性状态变换到另一个一致性状态
3. 隔离性
       每个事物必须独立与其他事务执行
4.持久性
       确保事物完成后,对数据的修改是永久性的,即使接下来发生系统鼓掌也不会对其有任何影响

commit(提交) 、 rollback(回滚)
例:
declare
begin
update demp set name = ‘a’ where id = 1;
commit;
update demp set name = ‘b’ where id = 2;
rollback; – 程序执行到这里会清除前面没提交存在内存中的数据;
update demp set name = ‘c’ where id = 3;
commit;
end;