`
kevin.wang
  • 浏览: 251083 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Returnning Into 总结

阅读更多
ORACLE的DML语句中可以指定RETURNING语句。使用起来也很简单,和SELECT INTO语句没有多大区别。RETURNING语句的使用在很多情况下可以简化PL/SQL编程。

  DELETE操作:RETURNING返回的是DELETE之前的结果;
  INSERT操作:RETURNING返回的是INSERT之后的结果;
  UPDATE操作:的RETURNING语句是返回UPDATE操作之后的结果。 

  INSERT INTO SELECT语句不支持。
  MERGE语句不支持RETURNING语句。


Example:
The RETURNING INTO clause allows us to return column values for rows affected by DML statements. The following test table is used to demonstrate this clause.

  DROP TABLE t1;

  DROP SEQUENCE t1_seq;

  CREATE TABLE t1 (

  id NUMBER(10),

  description VARCHAR2(50),

  CONSTRAINT t1_pk PRIMARY KEY (id)

  );

  CREATE SEQUENCE t1_seq;

  INSERT INTO t1 VALUES (t1_seq.nextval, 'ONE');

  INSERT INTO t1 VALUES (t1_seq.nextval, 'TWO');

  INSERT INTO t1 VALUES (t1_seq.nextval, 'THREE');

  COMMIT;When we insert data using a sequence to generate our primary key value, we can return the primary key value as follows.

  SET SERVEROUTPUT ON

  DECLARE

  l_id t1.id%TYPE;

  BEGIN

  INSERT INTO t1 VALUES (t1_seq.nextval, 'FOUR')

  RETURNING id INTO l_id;

  COMMIT;

  DBMS_OUTPUT.put_line('ID=' || l_id);

  END;

  /

  ID=4

  PL/SQL procedure successfully completed.

  SQL>The syntax is also available for update and delete statements.

  SET SERVEROUTPUT ON

  DECLARE

  l_id t1.id%TYPE;

  BEGIN

  UPDATE t1

  SET    description = description

  WHERE  description = 'FOUR'

  RETURNING id INTO l_id;

  DBMS_OUTPUT.put_line('UPDATE ID=' || l_id);

  DELETE FROM t1

  WHERE  description = 'FOUR'

  RETURNING id INTO l_id;

  DBMS_OUTPUT.put_line('DELETE ID=' || l_id);

  COMMIT;

  END;

  /

  UPDATE ID=4

  DELETE ID=4

  PL/SQL procedure successfully completed.

  SQL>When DML affects multiple rows we can still use the RETURNING INTO, but now we must return the values into a collection using the BULK COLLECT clause.

  SET SERVEROUTPUT ON

  DECLARE

  TYPE t_tab IS TABLE OF t1.id%TYPE;

  l_tab t_tab;

  BEGIN

  UPDATE t1

  SET    description = description

  RETURNING id BULK COLLECT INTO l_tab;

  FOR i IN l_tab.first .. l_tab.last LOOP

  DBMS_OUTPUT.put_line('UPDATE ID=' || l_tab(i));

  END LOOP;

  COMMIT;

  END;

  UPDATE ID=1

  UPDATE ID=2

  UPDATE ID=3

  PL/SQL procedure successfully completed.

  SQL>We can also use the RETURNING INTO clause in combination with bulk binds.

  SET SERVEROUTPUT ON

  DECLARE

  TYPE t_desc_tab IS TABLE OF t1.description%TYPE;

  TYPE t_tab IS TABLE OF t1%ROWTYPE;

  l_desc_tab t_desc_tab := t_desc_tab('FIVE', 'SIX', 'SEVEN');

  l_tab   t_tab;

  BEGIN

  FORALL i IN l_desc_tab.first .. l_desc_tab.last

  INSERT INTO t1 VALUES (t1_seq.nextval, l_desc_tab(i))

  RETURNING id, description BULK COLLECT INTO l_tab;

  FOR i IN l_tab.first .. l_tab.last LOOP

  DBMS_OUTPUT.put_line('INSERT ID=' || l_tab(i).id ||

  ' DESC=' || l_tab(i).description);

  END LOOP;

  COMMIT;

  END;

  /

  INSERT ID=5 DESC=FIVE

  INSERT ID=6 DESC=SIX

  INSERT ID=7 DESC=SEVEN

  PL/SQL procedure successfully completed.

  SQL>This functionality is also available from dymanic SQL.

  SET SERVEROUTPUT ON

  DECLARE

  TYPE t_tab IS TABLE OF t1.id%TYPE;

  l_tab t_tab;

  BEGIN

  EXECUTE IMMEDIATE 'UPDATE t1

  SET    description = description

  RETURNING id INTO :l_tab'

  RETURNING BULK COLLECT INTO l_tab;

  FOR i IN l_tab.first .. l_tab.last LOOP

  DBMS_OUTPUT.put_line('UPDATE ID=' || l_tab(i));

  END LOOP;

  COMMIT;

  END;

  /

  UPDATE ID=1

  UPDATE ID=2

  UPDATE ID=3

  PL/SQL procedure successfully completed.

  SQL>

分享到:
评论

相关推荐

    解析SQL语句中Replace INTO与INSERT INTO的不同之处

    总结来说,`INSERT INTO` 和 `REPLACE INTO` 的主要区别在于处理冲突的方式:`INSERT INTO` 遇到冲突时会失败,而 `REPLACE INTO` 则会删除冲突的旧行再插入新行。在处理需要确保唯一性的数据时,`REPLACE INTO` 是...

    Mybatis批量foreach merge into的用法

    知识点总结: 1. Mybatis批量foreach merge into的用法可以批量插入时间价格表数据。 2. 使用Oracle 9i及其以后版本支持的merge into语句可以实现insertOrUpdate的功能。 3. Mybatis的动态SQL语法foreach循环插入...

    Oracle 中使用 fetch bulk collect into 批量效率的读取游标数据

    Oracle 中使用 fetch bulk collect into 批量效率的读取游标数据 Oracle 中的游标数据读取是数据库开发中非常常见的操作。通常,我们使用 fetch some_cursor into var1, var2 形式来获取游标数据,当游标中的记录数...

    MYSQL SELECT INTO 和 INSERT INTO SELECT

    ### MySQL中的SELECT INTO和INSERT INTO SELECT详解 #### 一、引言 在数据库管理与应用开发过程中,数据的复制是一项非常常见的需求。特别是在进行数据迁移、备份或创建新表时,能够快速有效地复制数据是非常重要...

    select into和insert into select使用方法

    ### 总结 - `SELECT INTO`主要用于从现有表中提取数据并创建新表,适合于需要创建新表并填充数据的场景。 - `INSERT INTO SELECT FROM`则更多用于已有表之间的数据复制或转换,可以在插入数据的同时进行额外的处理...

    Oracle中的select into

    Oracle中的select into Oracle中没有select into的用法! 在某些数据库中有select into的用法,用法是: select valueA,valueB into tableB from tableA; 上面这句语句的意思是将tableA表中的valueA和valueB字段的值...

    Insert Into 语句批量生成器

    根据表格数据批量生成Insert Into语句 <br> 本人在登陆CSDN论坛的数据库板块时,常看到很多网友提关于数据库的各种问题。而这些问题中有很多是要使用范例数据的。但是很多提问的朋友却没有把这些范例数据库的...

    Merge into的使用详解

    总结来说,`MERGE INTO`语句是数据库管理中的一个重要工具,尤其是在处理数据同步和更新时。熟练掌握`MERGE INTO`的用法,能够有效地提升数据处理的效率和准确性。通过实例,我们可以看到它如何根据不同的匹配情况...

    ORACLE INSERT INTO SELECT *FROM 分批提交例子

    ORACLE INSERT INTO SELECT *FROM 分批提交例子

    用SELECT… INTO OUTFILE语句导出MySQL数据的教程

    在MySQL中,SELECT… INTO OUTFILE语句是一个非常实用的功能,用于将查询结果直接导出到服务器主机上的文件。这个语句将数据以特定的格式保存,方便进行数据备份、迁移或者进一步处理。以下是关于使用SELECT… INTO ...

    Oracle merge into用法

    在Oracle数据库中,`MERGE INTO`语句是一种非常强大的工具,它允许用户根据源表中的数据更新目标表,同时也可以插入新记录。这一特性在处理大量数据时尤其有用,因为它能够在一个步骤中完成更新和插入操作,从而提高...

    SQL_INSERT_INTO_语句

    SQL_INSERT_INTO_语句是SQL语言中用于向数据库表中添加新记录的关键命令。它允许用户在已存在的表格中插入一行或多行新的数据。在理解这个语句之前,我们需要了解SQL(Structured Query Language),它是用于管理和...

    oracle merge into的使用

    标题:Oracle Merge Into 的使用 描述详解:Oracle Merge Into 是一个功能强大的SQL语句,它在Oracle数据库系统中被广泛用于处理数据同步、更新或插入操作。与传统的UPDATE和INSERT语句相比,Merge Into 提供了更为...

    insert into select和select into的使用和区别介绍

    insert into … select …:可将表1中的全部数据或者部分数据复制到表2中。 eg: 代码如下: insert into t2(id,name,pwd) select id,name,pwd from t1 注:t2必须存在。t1中查询的列名可不与t1列名相同。无 values ...

    insert into

    "Insert Into"是SQL语言中的一个关键操作,用于向数据库表中插入新的数据记录。这个命令的基本语法结构是`INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);`,其中`table_name`是你要...

    Oracle中merge into的使用

    在Oracle数据库中,`MERGE INTO`语句是一种强大的数据操作工具,它允许你在一个步骤中执行更新(UPDATE)和插入(INSERT)操作,从而提高了数据处理的效率和灵活性。这个命令尤其适用于需要同步两个表的数据时,比如...

    Dive into Python3

    《Dive into Python3》是一本专为Python 3编程语言设计的教程,旨在帮助初学者和有一定经验的程序员深入理解Python 3的核心概念和技术。这本书由Mark Pilgrim撰写,以其详细、实践性强的特点深受读者喜爱。尽管描述...

    dive into python3 (中文版)

    总结来说,《深入Python3》是一本全面的Python学习资源,它涵盖了Python 3的基础安装、语法、高级特性和生态系统等方面的知识。无论是编程初学者还是有经验的开发者,都能从中获得新的知识和灵感。掌握Python 3不仅...

    Dive Into HTML5 中文版

    Dive Into HTML5 中文版 Dive Into HTML5 中文版 Dive Into HTML5 中文版

Global site tag (gtag.js) - Google Analytics