PLSQL更改数据及管理事务

①在PL/SQL中使用DML
DML语句即UPDATE,DELETE,INSERT.
1)DML操作的游标属性
当从PL/SQL中执行一条select语句时,Oracle数据库管理系统会为该语句分配一个私有的工作区(包含了该语句的信息以及结果集的信息),同时并将查询的结果集放入系统全局区,Oracle中使用游标作为指针来引用该私有工作区
隐式游标的相关属性:
SQL%FOUND 如果记录成功获取,返回TRUE,否则返回FALSE.
SQL%NOTFOUND 如果记录获取失败,返回TRUE,否则返回FALSE.
SQL%ISOPEN 总是返回FALSE.—因为是在我们当时使用时打开,之后自动关闭,所以总是返回FALSE.
例:
select * from scott.emp
declare
begin
delete from scott.emp where sal<=2000;
if sql%found then
 dbms_output.put_line('被开除的员工共有'||sql%rowcount||'人');
 end if;
end;


2)DML语句的returning子句
例:
declare 
    v_ename scott.emp.ename%type;
    v_sal scott.emp.sal%type;
begin
    for rec in (select empno,ename,sal from scott.emp)
    loop
        update scott.emp set sal = sal*2 where empno = rec.empno
          returning ename,sal into v_ename,v_sal;
        dbms_output.put_line('Ô±¹¤'||v_ename||'µÄнˮΪ'||v_sal);
    end loop;
end;
②使用forall语句的批量DML
Forall语句的语法形式如下:
Forall index in lower_bound .. upper_bound
Sql语句;


其中,index为隐含定义的整数变量,作为集合元素的下标使用;lower_bound和upper_bound分别是集合元素的上界和下界.


*forall语句的主体必须是单个的insert,update或delete语句.




1) 在insert语句用批量绑定
create table demo( --创建一个demo表
dname varchar2(10),
dsal number(7,2)
);
declare 
       type dname_table_type is table of varchar2(10) index by binary_integer; --定义表类型和表变量
       type dsal_table_type is table of varchar2(10) index by binary_integer;
       dname_table dname_table_type;
       dsal_table dsal_table_type;
begin 
      for i in 1..10 --用循环给表变量赋值
      loop
      dname_table(i) := 'a'||to_char(i);
      dsal_table(i) := i*100;
      end loop;
      forall i in 1..dname_table.count 将两个表变量中的数据批量绑定插入到demo中
      insert into demo
      values(dname_table(i),dsal_table(i));
end;


结果为:
<pre name="code" class="sql">select * from demo;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值