您的位置:首页 > 数据库

PLSQL更改数据及管理事务

2017-02-17 20:19 459 查看
①在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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: