数据操作语句(DML)语句在已存在的模式对象进行访问和操作数据。DML语句不会隐私提交当前事务。以下是数据操作语言语句:
CALL
DELETE
EXPLAIN PLAN
INSERT
LOCK TABLE
MERGE
SELECT
UPDATE
SELECT语句是MDL语句的有限形式,它只能在数据库中访问数据。虽然它可以在查询结果返回之前操作访问数据,但是能在数据库中操作数据存储。
CALL和EXPLAIN PLAN只在动态执行的PL/SQL才支持。所有其他DML语句在PL/SQL都完全支持。
1.常用DML语句
下面主要介绍4种DML语句:INSERT、UPDATE、DELETE和MERGE
INSERT:向表中插入一条或者多条记录。
UPDATE:更新一个表中的一行或者多行的一列或多列值。
DELETE:删除表中一行或多行记录。
MERGE:如果表中已有了指定列值的记录行,就执行更新动作。如果没有指定列值的记录,就执行一个插入动作。
2.DML语句的游标属性
Oracle允许我们通过一些特殊的隐式游标属性访问最后一次运行的隐式游标的信息。记住隐式游标属性的值总是属于最后一次执行的SQL语句,而不管隐式游标是在一个块中执行。
名字 | 描述 |
SQL%FOUND | 如果有一行或则多行记录被成功修改(包括创建、修改、删除)返回TURE,否则返回FALSE |
SQL%NOTFOUND | 如果DML语句没有修改任何行则返回TRUE,否则返回FALSE |
SQL%ROWCOUNT | 返回被DML语句修改的记录行数 |
SQL%ISOPEN | 对于隐式游标(即DML语句)总是返回FALSE,因为Oracle数据库会自动打开和关闭这些游标 |
3.DML语句特有的PL/SQL特性
假设在执行一个UPDATE或则DELETE操作后,需要根据处理结果进行更多的处理。要实现这个目标,没必要在DML语句后面再用一个单独的查询语句,只需要在INSERT、UPDATE、DELETE或者MERGE语句中添加一个RETURNING语句,即可以直接把这些信息提取到一个变量中。使用RETURNING语句,可以减少网络上的往返交互,消耗的服务器CPU时间会更少,并把应用程序所打开和管理的游标数量最小化。
例如:
declare
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
for rec in (select * from emp e where e.deptno = 10) loop
update emp e
set e.sal = e.sal * 1.5
where e.empno = rec.empno
returning e.ename, e.sal into v_ename, v_sal;
end loop;
end;