重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛

标题: ORACLE RETURNING子句让你的DML操作更加高效 [打印本页]

作者: mahan    时间: 2025-10-12 21:29
标题: ORACLE RETURNING子句让你的DML操作更加高效
在日常的数据库操作中,我们经常需要在执行DML语句(INSERT、UPDATE和DELETE)之后,获取被操作数据的信息。常规的做法是在DML执行前后执行SELECT语句来查询数据。但这样做不仅增加了代码量,还可能影响性能。

幸运的是,Oracle数据库提供了一个强大而简洁的特性:RETURNING INTO子句。它允许我们在同一条DML语句中直接返回受影响行的列值,极大地提升了代码的效率和可读性。

RETURNING INTO 子句简介
RETURNING INTO子句可以附加在DML语句之后,用于将受影响数据行的列值存储到指定变量中。具体来说:

INSERT操作:返回插入后的值
UPDATE操作:返回更新后的值
DELETE操作:返回删除前的值
这一特性既可以在SQL*Plus中使用,也可以在PL/SQL中使用,下面通过实际示例来展示其用法。

SQL*Plus 中的使用示例
INSERT 操作
VARIABLE info varchar2(40);
insert into scott.dept values (50, 'TECHNICAL', 'FUJIAN')
returning dname || ':' || loc into :info;
commit;
print :info;
执行结果:

INFO
----------------------------------------
TECHNICAL:FUJIAN
UPDATE 操作
VARIABLE info varchar2(40);
update scott.dept set deptno = 51 where dname = 'TECHNICAL'
returning dname || ':' || loc into :info;
commit;
print :info;
执行结果:

INFO
----------------------------------------
TECHNICAL:FUJIAN
DELETE 操作
VARIABLE info varchar2(40);
delete scott.dept where dname = 'TECHNICAL'
returning dname || ':' || loc into :info;
commit;
print :info;
执行结果:

INFO
----------------------------------------
TECHNICAL:FUJIAN
PL/SQL 中的使用示例
INSERT 操作
set serveroutput on;
declare
  row_id rowid;
  info   varchar2(40);
begin
  insert into scott.dept values (50, 'TECHNICAL', 'FUJIAN')
  returning rowid, dname || ':' || to_char(deptno) || ':' || loc
  into row_id, info;
  commit;
  dbms_output.put_line(info);
end;
/
执行结果:

TECHNICAL:50:FUJIAN

PL/SQL 过程已成功完成。
UPDATE 操作
declare
  row_id rowid;
  info   varchar2(40);
begin
  update scott.dept set deptno = 51 where dname = 'TECHNICAL'
  returning rowid, dname || ':' || loc into row_id, info;
  commit;
  dbms_output.put_line(info);  
end;
/
执行结果:

TECHNICAL:FUJIAN

PL/SQL 过程已成功完成。
DELETE 操作
declare
  row_id rowid;
  info   varchar2(40);
begin
  delete scott.dept where dname = 'TECHNICAL'
  returning rowid, dname || ':' || loc into row_id, info;
  commit;
  dbms_output.put_line(info);  
end;
/
执行结果:

TECHNICAL:FUJIAN

PL/SQL 过程已成功完成。
总结
Oracle的RETURNING INTO子句是一个极其实用的特性,它能够:

减少数据库往返次数:将DML操作和结果获取合并为一步
提高代码简洁性:避免了额外的SELECT查询语句
提升程序性能:减少了数据库调用开销
增强数据一致性:确保获取的数据与DML操作完全对应
无论是简单的SQL*Plus脚本还是复杂的PL/SQL程序,RETURNING INTO子句都能让你的dml操作更加高效和优雅。下次当你在Oracle中执行DML操作时,不妨尝试使用这一强大功能,体验它带来的便利和效率提升!






欢迎光临 重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2