包括insert delete updatemerge,在这里重点说一下merge语句。这个语句的主旨就是为实现在一句sql语句中实现insert、update、delete这三种操作,其中delete是10g以后的版本才支持的。语法结构不是本文关心的重点,大家可以去oraclereference中去看看。
DML操作的游标属性
每次执行结束sql语句,oracle会为主动的建立一个名叫SQL的隐式游标,可以用SQL%的方式访问sql语句执行的结果,但这个隐式游标记录的值永远是上一次执行的sql语句的结果,所以如果时间点一执行了一跳sql语句要在后面的某个地方用到它的执行结果,最好在执行结束后用一个变量保存他的值(比如var1:=SQL%ROWCOUNT)。下图总结了隐式游标属性返回值的意义
从DML语句返回结果
如果我们在plsql程序中执行了inert、update或者delete操作而且需要操作后的数据做进一步处理是,可以用returning子句返回结果。示例如下:
CREATE OR REPLACE PROCEDURE TEST1 AS
varsal empzxy.sal%type;
BEGIN
for var1 in (select * from empzxy)
loop
//这里如果修改了多行就需要一个结果集,这个以后在详细讲结果集的问题吧
update empzxy set sal=9000 where sal=800 returning salinto varsal;
if(sql%found) then
dbms_output.put_line(varsal);
endif;
end loop;
END TEST1;
DML和记录配合使用
CREATE OR REPLACE PROCEDURE TEST2 (insertdata in empzxy%rowtype)AS
BEGIN
insert into empzxy values insertdata;
exception
when others then
dbms_output.put_line(dbms_utility.format_error_backtrace);
END test2;
declare
my_emp empzxy%rowtype;
begin
my_emp.no:=20;
……
update empzxy set ROW=my_em;
end;
my_emp empzxy%rowtype;
update empzxy set sal=9000 where sal=800 returningempno,ename,job,megr,sal,comm,deptno into my_emp;