zoukankan      html  css  js  c++  java
  • Oracle(00):DML子句returing into用法举例

    一、概述:

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

    • INSERT操作: 返回INSERT之后的结果;
    • UPDATE操作: 返回UPDATE操作之后的结果。
    • DELETE操作: 返回DELETE之前的结果;

    INSERT INTO SELECT和MERGE语句不支持RETURNING语句。RETURNING和return通用。

    二、当插入使用序列生成主键值的数据时,能返回此主键值。

    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;

    三、更新和删除语句。

    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;

    四、当DML影响多行时,使用returing into,借助bulk collection语句将值返回到一个集合中。

    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;

    五、在For All语句中使用returing into。

    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;

    六、在动态sql中使用。

    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'
      using 7369
      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;

    注意:

    1. returning into在动态sql内部和外面都要写,且外面的returning后面不加字段直接into。

    2. using在returning前面

    3. 动态sql内部into后面变量名不固定,注意冒号(:),可以是命名规则下的任意字符。

    4. returning bulk collect into要写在外面,且后面不能是record。

    七、在C# 中使用returing into子句。

    using (OracleCommand cmd = Globals.Db.Connection.CreateCommand())
    {
        cmd.CommandText = "INSERT INTO table (Col1, Col2) VALUES (:ParamCol1, :ParamCol2) RETURNING ROWIDTOCHAR(ROWID) INTO :OutputROWID";
        cmd.Parameters.Add(paramCol1, data["Col1"]);
        cmd.Parameters.Add(paramCol2, data["Col2"]);
        OracleParameter outputRowId = new OracleParameter(":OutputROWID", OracleDbType.Varchar2, 30)
        {
            Direction = ParameterDirection.ReturnValue
        };//一定要有Size参数。
        cmd.Parameters.Add(outputRowId);
        cmd.BindByName = true;
    
        cmd.ExecuteNonQuery();
        string rtnValue = outputRowId.Value.ToString();
    }
  • 相关阅读:
    在IE和Firfox获取keycode
    using global variable in android extends application
    using Broadcast Receivers to listen outgoing call in android note
    help me!virtual keyboard issue
    using iscroll.js and iscroll jquery plugin in android webview to scroll div and ajax load data.
    javascript:jquery.history.js使用方法
    【CSS核心概念】弹性盒子布局
    【Canvas学习笔记】基础篇(二)
    【JS核心概念】数据类型以及判断方法
    【问题记录】ElementUI上传组件使用beforeupload钩子校验失败时的问题处理
  • 原文地址:https://www.cnblogs.com/springsnow/p/9394794.html
Copyright © 2011-2022 走看看