暂无图片
暂无图片
5
暂无图片
暂无图片
暂无图片

ORACLE RETURNING子句让你的DML操作更加高效和优雅

原创 szrsu 2025-10-08
216

在日常的数据库操作中,我们经常需要在执行DML语句(INSERTUPDATEDELETE)之后,获取被操作数据的信息。常规的做法是在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子句是一个极其实用的特性,它能够:

  1. 减少数据库往返次数:将DML操作和结果获取合并为一步
  2. 提高代码简洁性:避免了额外的SELECT查询语句
  3. 提升程序性能:减少了数据库调用开销
  4. 增强数据一致性:确保获取的数据与DML操作完全对应

无论是简单的SQL*Plus脚本还是复杂的PL/SQL程序,RETURNING INTO子句都能让你的dml操作更加高效和优雅。下次当你在Oracle中执行DML操作时,不妨尝试使用这一强大功能,体验它带来的便利和效率提升!

最后修改时间:2025-10-09 09:52:29
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论