oracle sql loop merge,Oracle之存储过程和MERGE INTO语句
一、MERGE INTO语句
1、merge into语句的功能:我们操作数据库的时候,有时候会遇到insert或者Update这种需求。我们操纵代码时至少需要写一个插入语句和更新语句并且还得单独写方法效验数据是否存在,这种操作完全可以用merge into语句代替,不仅省时省力而且条理更清晰,一个SQL语句直接完成插入,如果有相同主键进行更新操作。
使用场景:判断B表和A表是否满足ON中条件,如果满足则用B表去更新A表,如果不满足,则将B表数据插入A表或者更多的操作。
2、具体SQL:下边sql是我在工作中最常使用的,功能是对接口表(表B)中通过批次ID查到的合同进行对正式表(表A)插入和更新。除此之外,还可以根据你的想实现功能进行各种条件更新和插入。只update或者只insert,带条件的update或带条件的insert,全插入insert实现,带delete的update(觉得可以用3来实现)
MERGE INTO后是更新的表,USING是对接口表进行筛选,(如果有重复数据,仅选取一行插入,用ORDER BY 控制)。ON中是具体的条件(表中标识字段,字段编码)满足执行 WHEN MATCHED THEN 下的语句
不满足则执行WHEN NOT MATCHED THEN 后语句:
MERGE INTO TableA A
USING (
(SELECT L.*,
ROW_NUMBER() OVER(PARTITION BY T.FLEX_VALUE ORDER BY 1) AS RN
FROM TABLEB L
WHERE T.BATCH_ID = #{batchId} ) L
AND L.RN = 1 ) B
ON ( A.FLEX_VALUE = B.FLEX_VALUE )
WHEN MATCHED THEN
UPDATE
A.FLEX_VALUE_SET_NAME = B.FLEX_VALUE_SET_NAME,
A.VALIDATION_TYPE = B.VALIDATION_TYPE,
WHEN NOT MATCHED THEN
INSERT (
A.FLEX_VALUE_SET_NAME = B.FLEX_VALUE_SET_NAME,
A.VALIDATION_TYPE = B.VALIDATION_TYPE)
二、Oracle的存储过程
1、定义:存储过程(Stored Procedure):就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过,编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数,来调用并执行它,从而完成一个或一系列的数据库操作。
2、创建:Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常。
我在工作中常用的一个存储过程结构如下:
--存储过程校验信息,三个入参,一个输入批次。输出分别是错误编码,和错误信息。
PROCEDURE VALIDATE_ARCHIVE_ITF(P_BATCHID IN VARCHAR2,
P_FLAG OUT NUMBER,
P_MSG OUT VARCHAR2) IS
CURSOR CMS_ARCHIVE_ITF(BATCHID VARCHAR2) IS
SELECT ROWID,
CONTRACT_NO,
ARCHIVE_STUTAS,
ERROR_INFO,
ARC_TIME
FROM CMS_ARCHIVE_IFT CAI
WHERE CAI.BATCH_ID = BATCHID;
L_ERROR_MSG VARCHAR2(255); --定义变量错误信息
L_TENANT_ID VARCHAR2(255);--定义变量租户ID
L_CONTRACT_SERIAL_NO VARCHAR2(255);--定义变量
BEGIN
FOR RET IN CMS_ARCHIVE_ITF(P_BATCHID) LOOP
L_ERROR_MSG := NULL;--给传入三个参数赋默认值
P_FLAG := 1;
P_MSG := NULL;
--对输入字段非空效验
IF (RET.ARC_TIME IS NULL OR RET.ARC_TIME = '') THEN
L_ERROR_MSG := L_ERROR_MSG || 'LAST_UPDATE_DATE不能为空;';
END IF;
--判断非空校验是否成功,不成功继续继续下一个。如果有错误更新接口表
IF L_ERROR_MSG IS NOT NULL THEN
P_FLAG := -99;
UPDATE CMS_ARCHIVE_IFT
SET ERROR_CODE = '01', ERROR_MSG = L_ERROR_MSG
WHERE ROWID = RET.ROWID;
CONTINUE;
END IF;
--如果成功通过条件效验
IF P_FLAG = 1 THEN
BEGIN
INSERT INTO CMS_ARCHIVE_INFO
(TENANT_ID,
CONTRACT_ID,
ARCHIVE_ID)
VALUES
( RET.TENANT_ID,
(SELECT CONTRACT_ID
FROM CMS_CONTRACT_INFO
WHERE CONTRACT_NO = RET.CONTRACT_NO),
SYS_GUID() )
EXCEPTION--异常信息
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SUBSTR(SQLERRM, 1, 200));
P_FLAG := -99;
P_MSG := SUBSTR(SQLERRM, 1, 200);
END;
END IF;
END LOOP;
END;
oracle sql loop merge,Oracle之存储过程和MERGE INTO语句相关推荐
- oracle的 客户端工具,Oracle SQL Handler下载-Oracle数据库客户端工具5.2 官方版-东坡下载...
Oracle数据库客户端工具是一款非常好用的Oracle数据库客户端工具.有了它,用户可以轻松导出各种数据,操作简单,使用方便,占用资源少.有这方面需要的朋友可以来下载试试! Oracle数据库客户端 ...
- sql字符串截取oracle,SQL Sever和Oracle截取字符串分析
不同的数据库下截取字符串的方法函数是不同的,在sql server下用的是substring(expression, start, length),Oracle下用的是substr(expressio ...
- Oracle+sql+取年度,oracle SQL语句取本周本月本年的数据
--国内从周一到周日 国外是周日到周六 select to_char(sysdate-1,'D') from dual;--取国内的星期几 去掉减一取国外的星期 --取本周时间内的数据 select ...
- oracle sql下划线,oracle通配符?oracle like 下划线?oracle escape用法?通配符like的使用教程...
你是否正在寻找关于oracle通配符的内容?让我把最内涵的东西奉献给你: oracle sql语言模糊查询--通配符like的使用教程 oracle在Where子句中,可以对datetime.char ...
- oracle sql分析 cost,Oracle SQL的优化技巧详解
SQL的优化应该从5个方面进行调整: 1.去掉不必要的大型表的全表扫描 2.缓存小型表的全表扫描 3.检验优化索引的使用 4.检验优化的连接技术 5.尽可能减少执行计划的Cost SQL语句: 是对数 ...
- oracle sql文本 参数,ORACLE 参数文件
参数文件:spfile / pfile 查看目前系统使用的参数文件信息: show parameter spfile; 动态参数文件spfile文件:二进制文件 位置:$ORACLE_HOME/dbs ...
- oracle sql判断相等,Oracle PL/SQL判断两个字段相等或不等问题
Oracle PL/SQL中判断两个两个字段相等或者不相等的时候,常常出现:字段值明明不相等(一个空,一个不空),但是判断不相等的时候就是得不到TRUE. 例如以下代码: ... a1 VARCHA ...
- oracle sql 调试,关于Oracle和SQL存储调试和出错处理
今天,小编为大家带来了新的关于数据库的内容.在大型数据库中,因为开发的需要,经常需要调用Procedure.在Oracle和SQLServer上开发Procedure因为语法不同,而有所区别:调试Pr ...
- oracle sql去差集,Oracle 两个逗号分割的字符串,获取交集、差集的sql实现过程解析...
Oracle数据库的两个字段值为逗号分割的字符串,例如:字段A值为"1,2,3,5",字段B为"2". 想获取两个字段的交集(相同值)2,获取两个字段的差集(差 ...
最新文章
- linux内核kconfig objs,linux内核中Kconfig和Makefile 详解
- linux模块化机制,Linux模块化机制和module_init
- 深度学习 load_data_fashion_mnist
- 百度绿色底座亮相 AI原生云低碳前行
- SAP C4C里没有选择Port binding的url Mashup行为分析
- 矩阵学习摘记,欢迎指正
- 闲鱼有微信小程序吗_微信小程序商品展示页面(仿咸鱼)
- Kafka和RocketMQ底层存储:零拷贝技术
- android 使用天地图,天地图嵌入到Android手机中
- select非group by字段的方法
- 磁盘文件排序-编程珠玑
- 免费python课程排行榜-Python爬虫学习排行榜
- 聚类时需要标准化吗_收房时,需要请专业验房师吗?
- Java集合笔记,实用!!
- 史上最全编程语言列表,你掌握了哪些?
- 数据库系统-实体-联系模型
- 2013年IT界25个最古怪的面试题
- el-descriptions
- win10复制粘贴不能用解决方法汇总
- Self-assessment Checklists of HSK
热门文章
- 31Exchange Server 2010跨站点部署-搬迁Exchange服务器到分支机构
- 网络营销第四课:网络营销需要掌握的网页代码(2)
- Jquery getJSON方法分析(二)
- 安装hadoop集群---resourcemanager和NameNode不在同一台机器上
- spring mvc 工作流程
- android5.1 sdk version,java - Android SDK version 23.6 - Stack Overflow
- python获取文件名不含后缀名_大部分Python资料都没有说到的重点-用实战教你解决问题的思路...
- ajax预加载html seo,前端性能优化 — JS预加载和懒加载
- vqa mcb_MCB的完整形式是什么?
- 第一个错误的版本_寻找第一个错误的版本