①在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;
PLSQL更改数据及管理事务
最新推荐文章于 2023-05-11 13:02:50 发布