Oracle Merge Into ORA-00001: unique constaint violated问题

最近使用Datax同步进行定时数据同步,并在同步完之后进行回调sql进行统计操作。对应的ORACLE表结构如下:

create table DATA_STAT_DAY (
DATA_DATE DATE, 
ID VARCHAR2(2), 
NAME VARCHAR2(2),
CLASSNO VARCHAR2(2),
SCORES NUMBER(16,0)
);CREATE UNIQUE INDEX IDX_DATA_STAT_DAY ON DATA_STAT_DAY(DATA_DATE, ID, NAME, CLASSNO);

回调对应的SQL如下:

MERGE INTO DATA_STAT_DAY a
USING (SELECT DATA_DATE,'0000' AS ID,NAME,CLASSNO, SUM(SCORES) SCORESFROM DATA_STAT_DAY WHERE ID % 2 = 0GROUP BY DATA_DATE,NAME,CLASSNO
) b 
ON (a.DATA_DATE = b.DATA_DATE and a.ID = b.ID and a.NAME = b.NAME and a.CLASSNO = b.CLASSNO)
WHEN MATCHED THEN UPDATE SET a.SCORES = b.SCORES
WHEN NOT MATCHED THEN INSERT INTO (a.DATA_DATE,a.ID,a.NAME,a.CLASSNO,a.SCORES)VALUES (b.DATA_DATE,b.ID,b.NAME,b.CLASSNO,b.SCORES)

回调SQL执行过程中,触发了 ORA-00001: unique constaint violated 的错误,其中USING部分的数据没有重复的,并且表中也没有和USING表中重复的,但是这里面的NAME和CLASSNO字段是有部分字段为NULL,ID部分有重复的值,然后这就导致了MERGE INTO的USING 关联的ON条件的时候判断为没关联上。但是在插入的时候,唯一索引判断重复了,所以对应的USING的数据集的ON部分的字段不能有为NULL的,否则会报唯一索引冲突的问题。

ORACLE的递归查询

SELECT M.MGT_ORG_CODE,LPAD(' ', LEVEL * 2, ' ') || M.MGT_ORG_NAME AS MGT_ORG_NAME,M.PRNT_MGT_ORG_CODE,SYS_CONNECT_BY_PATH(M.MGT_ORG_CODE, '>') AS CODE_PATH,REGEXP_SUBSTR(SYS_CONNECT_BY_PATH(M.MGT_ORG_CODE, '>'),'[^>]+',1,1,'i') AS MGT_ORG_C1,REGEXP_SUBSTR(SYS_CONNECT_BY_PATH(M.MGT_ORG_CODE, '>'),'[^>]+',1,2,'i') AS MGT_ORG_C2,REGEXP_SUBSTR(SYS_CONNECT_BY_PATH(M.MGT_ORG_CODE, '>'),'[^>]+',1,3,'i') AS MGT_ORG_C3,REGEXP_SUBSTR(SYS_CONNECT_BY_PATH(M.MGT_ORG_CODE, '>'),'[^>]+',1,4,'i') AS MGT_ORG_C4,REGEXP_SUBSTR(SYS_CONNECT_BY_PATH(M.MGT_ORG_CODE, '>'),'[^>]+',1,5,'i') AS MGT_ORG_C5,REGEXP_SUBSTR(SYS_CONNECT_BY_PATH(M.MGT_ORG_CODE, '>'),'[^>]+',1,6,'i') AS MGT_ORG_C6,CONNECT_BY_ROOT(M.MGT_ORG_CODE) AS ROOT_CODE_VAL,CONNECT_BY_ISLEAF AS ISLEAF,M.DIST_LV,'0' || (LEVEL + 1) AS MGT_LEVELFROM (SELECT T.MGT_ORG_CODE,T.DIST_LV,T.PRNT_MGT_ORG_CODE,T.MGT_ORG_NAMEFROM M_MGT_ORG TWHERE T.MGT_ORG_TYPE = 'corp'AND T.VALID_FLAG = '02') MSTART WITH M.DIST_LV = '02'
CONNECT BY NOCYCLE PRIOR M.MGT_ORG_CODE = M.PRNT_MGT_ORG_CODEORDER BY M.MGT_ORG_CODE

START WITH:指定起始节点的条件
CONNECT BY:指定父子行的条件关系
PRIOR:查询父行的限定符,格式:prior column1=column2 or column1=prior column2
NOCYCLE:若数据表中存在循环行,那么不添加此关键字会报错,添加关键字后,便不会报错,但循环的两行只会显示其中的第一条
循环行:该行只有一个子行,而且子行又是该行的祖先行
CONNECT_BY_ISCYCLE:前置条件:在使用了NOCYCLE之后才能使用此关键字,用于表示是否是循环行,0表示否,1表示是
CONNECT_BY_ISLEAF:是否是叶子节点,0表示否,1表示是
LEVEL:level伪列,表示层级,值越小层级越高,level=1为层级最高节点
CONNECT_BY_ROOT: 可以获取树形查询根记录的字段,start with开始的地方被视为根节点。
SYS_CONNECT_BY_PATH:从start with开始的地方开始遍历,并记下其遍历到的节点,start with开始的地方被视为根节点,将遍历到的路径根据函数中的分隔符,组成一个新的字符串。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/69517.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

postgis数据库导出csv表再导入postgis

1、导出csv表 from settings_Address import * from sqlalchemy import create_engine, MetaData import pandas as pd def create_conn(Postgis_user,Postgis_password,Postgis_host,Postgis_port,dbname_PG):# return create_engine(PostgispyPostgis://{}:{}{}:{}/{}.forma…

Mysql 流程控制

简介 我们可以在存储过程和函数中实现比较复杂的业务逻辑,但是需要对应的流程控制语句来控制,就像Java中分支和循环语句一样,在MySQL中也提供了对应的语句,接下来就详细的介绍下。 1.分支结构 1.1 IF语句 IF 表达式1 THEN 操作1…

Android MQTT:实现设备信息上报与远程控制

Android MQTT:实现设备信息上报与远程控制 1. 介绍 1.1 MQTT是什么? MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,最初由IBM开发,用于连接远程设备与服务器之间的通信。它在物…

尚硅谷SpringMVC (9-13)

九、HttpMessageConverter HttpMessageConverter ,报文信息转换器,将请求报文转换为 Java 对象,或将 Java 对象转换为响应报文 HttpMessageConverter提供了两个注解和两个类型: RequestBody , ResponseBody &#xff…

【AI创作助手使用测试】C++使用场景生成、Windows设备驱动开发介绍、调试技巧

C 是一种通用的编程语言,具有高性能、高效率、高可维护性等优点,被广泛应用于以下场景: 操作系统和嵌入式系统开发:C 是编写操作系统和嵌入式系统的主要语言之一,它可以提供底层的控制和资源管理,并且具有高…

手写Mybatis:第20章-Mybatis 框架源码10种设计模式分析

文章目录 一、类型:创建型模式1.1 工厂模式1.2 单例模式1.3 建造者模式 二、类型:结构型模式2.1 适配器模式2.2 代理模式2.3 组合模式2.4 装饰器模式 三、类型:行为型模式3.1 模板模式3.2 策略模式3.3 迭代器模式 一、类型:创建型…

代码随想录算法训练营day56 | LeetCode 583. 两个字符串的删除操作 72. 编辑距离

583. 两个字符串的删除操作(题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台) 思路:实际上就是求两个字符串的最长公共子序列。或者也可以换成编辑距离的理解思路(这种就是直接用动…

Python生成器和迭代器

Python的生成器是一种特殊的函数,它可以在迭代过程中动态生成值,而不是一次性生成所有值。生成器使用yield语句来产生一个值,并且在每次调用时暂停执行,保留当前的状态。当再次调用生成器时,它会从上次暂停的地方继续执…

HashMap源码分析(JDK1.8)

概述 JDK 1.8 对 HashMap 进行了比较大的优化,底层实现由之前的 “数组链表” 改为 “数组链表红黑树”,本文就 HashMap 的几个常用的重要方法和 JDK 1.8 之前的死循环问题展开学习讨论。 JDK 1.8 的 HashMap 的数据结构如下图所示,当链表节…

SQL中CONVERT()函数用法详解

SQL中CONVERT函数格式: CONVERT(data_type,expression[,style]) 参数说明: expression 是任何有效的 Microsoft SQL Server™ 表达式。。 data_type 目标系统所提供的数据类型,包括 bigint 和 sql_variant。不能使用用户定义的数据类型。 length nchar、nva…

Elasticsearch Head的使用

目录 概述一、安装 Elasticsearch Head二、解压文件三、安装Elasticsearch Head依赖四、启动 Elasticsearch Head五、修改Elasticsearch Head启动端口号六、使用 Elasticsearch Head注意事项 概述 Elasticsearch Head 是一个用于管理和监控 Elasticsearch 集群的 Web 界面工具…

【Linux】Ubuntu20.04版本配置pytorch环境2023.09.05【教程】

【Linux】Ubuntu20.04版本配置pytorch环境2023.09.05【教程】 文章目录 【Linux】Ubuntu20.04版本配置pytorch环境2023.09.05【教程】一、安装Anaconda虚拟环境管理器二、创建虚拟环境并激活三、安装Pytorch四、测试pytorchReference 一、安装Anaconda虚拟环境管理器 首先进入…

Ubuntu18.04系统下通过ROS控制Kinova真实机械臂-多种实现方式

所用测试工作空间test_ws:包含官网最原始的功能包 一、使用Kinova官方Development center控制真实机械臂 0.在ubuntu系统安装Kinova机械臂的Development center,这一步自行安装,很简单。 1.使用USB连接机械臂和电脑 2.Development center…

防止SQL注入的四种方案

一、什么是SQL注入? SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服…

typescript删除array中的空值

使用.flat() 可以看到,调用之后空值被清清除了,如果本身就是1维数组就无所谓,但如果本身是多维数组,又不想数组维度被改变的话就需要传入0,才不会导致数据维度改变

手写RPC框架--5.Netty业务逻辑

RPC框架-Gitee代码(麻烦点个Starred, 支持一下吧) RPC框架-GitHub代码(麻烦点个Starred, 支持一下吧) Netty业务逻辑 5.Netty业务逻辑a.加入基础的Netty代码b.对通道channel进行缓存c.对代码进行重构优化d.完成基础通信e.异步获取服务器的返回结果f.调整代码g.处理handler (优化…

Webpack5入门到原理

Webpack5学习 尚硅谷Webpack5新版视频教程 B站直达:https://www.bilibili.com/video/BV14T4y1z7sw 百度网盘:https://pan.baidu.com/s/114lJRGua2uHBdLq_iVLOOQ 提取码:yyds 阿里云盘:https://www.aliyundrive.com/s/UMkmCzdWsGh&…

[数据集][目标检测]裸土识别裸土未覆盖目标检测数据集VOC格式857张2类别

数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):857 标注数量(xml文件个数):857 标注类别数:2 标注类别名称:["luotu","n…

数据结构——哈希

哈希表 是一种使用哈希函数组织数据的数据结构,它支持快速插入和搜索。 哈希表(又称散列表)的原理为:借助 哈希函数,将键映射到存储桶地址。更确切地说, 1.首先开辟一定长度的,具有连续物理地址…

【小沐学Unity3d】3ds Max 骨骼动画制作(CAT、Character Studio、Biped、骨骼对象)

文章目录 1、简介2、 CAT2.1 加载 CATRig 预设库2.2 从头开始创建 CATRig 3、character studio3.1 基本描述3.2 Biped3.3 Physique 4、骨骼系统4.1 创建方法4.2 简单示例 结语 1、简介 官网地址: https://help.autodesk.com/view/3DSMAX/2018/CHS https://help.aut…