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;
注意:
returning into在动态sql内部和外面都要写,且外面的returning后面不加字段直接into。
using在returning前面
动态sql内部into后面变量名不固定,注意冒号(:),可以是命名规则下的任意字符。
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();
}
DML子句returing into用法举例的更多相关文章
- c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例
c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. 1 ...
- 【转】awk 里的substr函数用法举例
awk 里的substr函数用法举例: 要截取的内容:2007-08-04 04:45:03.084 - SuccessfulTradeResult(status: 1, currencyPair: ...
- 12. nc/netcat 用法举例
nc命令用法举例 什么是nc nc是netcat的简写,有着网络界的瑞士军刀美誉.因为它短小精悍.功能实用,被设计为一个简单.可靠的网络工具 nc的作用 (1)实现任意TCP/UDP端口的侦听,nc可 ...
- 线程框架Executor的用法举例
java5线程框架Executor的用法举例 Executor 是 java5 下的一个多任务并发执行框架(Doug Lea),可以建立一个类似数据库连接池的线程池来执行任务.这个框架主要由三个接口和 ...
- java8中的localdate和localtime用法举例
java8中的localdate和localtime用法举例如下:这两个方法使我们可以方便的实现将旧的日期类转换为新的日期类,具体思路都是通过Instant当中介,然后通过Instant来创建Loca ...
- sql的游标用法举例(Cursor)
sql的游标用法举例 ), ) Declare authors_cursor Cursor For Select Name,TrueName From Account Open authors_cur ...
- mysql操作查询结果case when then else end用法举例
Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN ...
- python yield用法举例说明
1 yield基本用法 典型的例子: 斐波那契(Fibonacci)數列是一个非常简单的递归数列,除第一个和第二个数外,任意一个数都可由前两个数相加得到.1 2 3 5 8…… def fab(ma ...
- django models 中choices之用法举例
CHOICES常用做单选属性,下面举例在django models中人物性别的用法: 我们先定义一个模型,名字为Students ,这个Students 包含了名字和性别两个字段,代码如下: from ...
随机推荐
- spring springboot websocket 不能注入( @Autowired ) service bean 报 null 错误
spring 或 springboot 的 websocket 里面使用 @Autowired 注入 service 或 bean 时,报空指针异常,service 为 null(并不是不能被注入). ...
- ubuntu18.04 安装 wps2019
安装包可以从官网下载 linuxidc@linuxidc:~/linuxidc.com$ sudo dpkg -i *.deb [sudo] linuxidc 的密码: 正在选中未选择的软件包 wps ...
- LeetCode 230. 二叉搜索树中第K小的元素(Kth Smallest Element in a BST)
230. 二叉搜索树中第K小的元素 230. Kth Smallest Element in a BST 题目描述 给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的 ...
- Java常用命令:jps、jstack、jmap、jstat(带有实例教程)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u013310517/article/details/80990924 查看Java进程:jps ...
- QT 创建一个线程播放监控视频
1.创建一个线程类(PlayVideoThread): PlayVideoThread.h头文件 #pragma once #include <QObject> #include &quo ...
- C++进行字母大小写转换
#include <iostream> #include <Windows.h> #include <string> using namespace std; in ...
- 爬虫探索Chromedriver+Selenium初试
今天分享Python使用Chromedriver+Selenium爬虫的的方法,Chromedriver是一个有意思的爬虫插件,这个插件的爬虫方式主要是完全模拟浏览器点击页面,一步一步去找你要的东西, ...
- java 禁用科学计数法
禁用科学计数法 Double num = 80000000000.000001; System.out.println("默认计数法:num=" + num); NumberFor ...
- 第一章 Java的IO演进之路
Unix中5种IO模型 就网络通信而言,一次数据读入可以分为两个阶段,首先等待数据从网络中到达,到达后需要复制到内核的缓冲区中,第二个阶段是从内核的缓冲区复制到进程的缓冲区,复制到进程的缓冲区才算读取 ...
- Apollo 与 .net core
appsettings配置内容 { "Apollo": { "AppId": "netcore", "Env": &qu ...