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

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 356|回复: 0
打印 上一主题 下一主题

[Oracle] ORACLE RETURNING子句让你的DML操作更加高效

[复制链接]
跳转到指定楼层
楼主
发表于 2025-10-12 21:29:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在日常的数据库操作中,我们经常需要在执行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操作时,不妨尝试使用这一强大功能,体验它带来的便利和效率提升!

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2026-4-17 21:20 , Processed in 0.194071 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表