Oracle转Mysql出现的问题记录

news2024/9/27 16:53:52

学海无涯,旅“途”漫漫,“途”中小记,如有错误,敬请指出,在此拜谢!

文章目录

  • 前言
  • 函数错误
    • concat函数使用有区别
      • 代码示例
      • 导致问题
      • 区别及分析
      • 解决方法
    • 时间相减
      • 代码示例
      • 导致问题
      • 区别与分析
      • 解决方法
    • or 不走索引
      • 代码示例
      • 导致问题
      • 区别与分析
        • oracle
        • mysql
      • 解决办法
  • 其他错误
    • 转换时,oracle类型Number类型对应到mysql为decimal

前言

最近有幸,我司的一个项目在进行oracle转mysql数据库,其中碰到了一些坑,排查发现了一些共性问题,遂记录当前文档进行处理。为了不出现公司的相关内容,部分图片会添加马赛克,进行模糊处理,如有不清楚的地方,可以私聊讨论,对应的版本内容如下:

工具对应版本
Oracle12c
Mysql8.0.33
ORM框架mybatis 3.4.2
转换工具Navicat

函数错误

concat函数使用有区别

代码示例

select concat(字段A,字段B) from 表名;

导致问题

查出的数据为空

区别及分析

区别OracleMysql
拼接内容只能拼接两个字符串CONCAT(str1,str2)能拼接多个CONCAT(str1,str2,…)
参数为空结果有空值也没事(下图1)只要有一个为空,结果就是空(下图2)

在这里插入图片描述

在这里插入图片描述

解决方法

在mysql中,增加ifnull(参数,‘’)的函数,保证如果参数为空,则返回空字符串即可

时间相减

代码示例

select REALEND(时间字段1- REALSTART(时间字段2fromwhere;

导致问题

数据计算出错

区别与分析

区别OracleMysql
时间相减计算出是以天为单位的数字计算出的结果很怪异

oracle Date减出来的是以天为单位

在这里插入图片描述

mysql datetime减出来的,很奇怪。

在这里插入图片描述

解决方法

需要增加time_to_sec,求出的是秒数。如果要转日或者天,则除以60和24即可。

在这里插入图片描述

or 不走索引

代码示例

select c.ID,g.realstart,row_number() OVER (PARTITION BY c.id,cd.name ORDER BY g.realstart ,g.字段a) AS d
FROM 表c c
left join 表f f on c.aid = f.ID or c.did = f.ID
left join 表g g on f.ID = g.fid and g.realstart is not null
left join 表cd cd ON g.did = cd.id
WHERE c.create_time BETWEEN '2023-07-06' AND '2023-07-13';

导致问题

不走索引会出现查询缓慢

区别与分析

oracle

oracle的or语法走不走索引,这个还不一定,最好自己在写完sql后,自己查询一下执行计划,看看扫描行数。使用plsql的功能可以查询,我使用的是datagrip,选择要查询的sql,右键会出现explain plan的按钮,点击便可以查看。

在这里插入图片描述

点击之后结果如下所示,可以看出,扫描最多的行数为3360,明显不是全表扫描(这几个表,每个表都至少5W+的数据量)

在这里插入图片描述

mysql

mysql使用explain即可,可以查询扫描结果。结果如下图所示,可以看出,第二条数据,扫描了40W行数据,进行了一次全表扫描

在这里插入图片描述

解决办法

将or转换成union all,每个链接子查询都走索引,速度就很快了

select ID,realstart,row_number() OVER (PARTITION BY id,name ORDER BY realstart ,d) AS dr
from (select c.ID,g.realstart,name,g.d
      FROM 表c c
      left join 表f f on c.aid = f.ID
      left join 表g g on f.ID = g.fid and g.realstart is not null
      left join 表cd cd ON g.dispatchid = cd.id
      WHERE c.create_time BETWEEN '2023-07-06' AND '2023-07-13'
      union all
      select c.ID,g.realstart,name, g.d
      FROM 表c c
      left join 表f f on c.did = f.ID
      left join 表g g on f.ID = g.fid and g.realstart is not null
      left join 表cd cd ON g.dispatchid = cd.id
      WHERE c.create_time BETWEEN '2023-07-06' AND '2023-07-13') as kkt1

如图所示可以看出,每个执行的sql,扫描行数的极少

在这里插入图片描述

在修改完之后,总体sql(以上查询的sql,只为总sql的一小部分)查询时间从27秒减小到526毫秒。优化效果显著。

在这里插入图片描述

其他错误

转换时,oracle类型Number类型对应到mysql为decimal

在oracle中,经常会用Number作为数字类型的存储,Number默认值,可以认为Number(38,0),最后存储的是一个整数,而转换到mysql上,就会变成decimal(65,32),导致查询的时候出现一堆小数点的问题。

image-20230720152232413

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

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

相关文章

入门Linux基本指令(1)

本篇文章介绍Linux中的一些常用基本指令来供大家学习和参考。 目录 ls指令 pwd指令 cd指令 .和.. touch指令与mkdir指令 rm指令 man指令 ls指令 语法 : ls [ 选项 ][ 目录或文件 ] 功能 :对于目录,该命令列出该目录下的所有子目录与…

无符号数和有符号数的“bug”

1. 起因 在实现kmp算法时&#xff0c;出现了诡异的现象&#xff0c;看下面的代码&#xff1a; int KMP (const char *s, const char *t) {int lenS strlen (s);int lenT strlen (t);int next[lenT];get_next (next, t);int i 0;int j 0;while (i < lenS && j …

C#安装包制作过程详解

本文讲解C#安装包制作过程。 文章目录 一、安装打包插件二、项目的部署与安装三、制作安装包时注意路径一、安装打包插件 打开VS2017:工具 --> 扩展和更新 --> 联机,搜索Microsoft Visual Studio Installer Projects,如图: 下载Microsoft Visual Studio Installe…

PostgreSQL数据库动态共享内存管理器——Dynamic shared memory areas

dsm.c提供的功能允许创建后端进程间共享的共享内存段。DSA利用多个DSM段提供共享内存heap&#xff1b;DSA可以利用已经存在的共享内存&#xff08;DSM段&#xff09;也可以创建额外的DSM段。和系统heap使用指针不同的是&#xff0c;DSA提供伪指针&#xff0c;可以转换为backend…

Hbase基础概念

HBase 一、HBase的数据模型1.HBase数据存储结构2.HBase存储概念3.HBase基本架构 二、HBase Shell1.DDL(Data Definition Language)2.DML&#xff08;Data Manipulation Language&#xff09; 三、HBase组成架构1. Master架构2. RegionServer架构 四、HBase读写流程1.写流程MemS…

AI数字人:金融数字化转型的“关键先生”

今年年初ChatGPT的火热&#xff0c;在全球掀起一阵生成式AI&#xff08;AIGC&#xff09;热潮。国外的OpenAI、国内的百度等企业&#xff0c;都在AIGC上强力布局。 各种应用场景中&#xff0c;AIGC助力的数字人引起了市场注意。 事实上&#xff0c;数字人不是个新鲜事。早在1…

Linux 系统下 “Verilog” 编程配置

文章目录 简介Verilog HDLIverilogGtkwave 环境搭建软件的安装Vim 之 Verilog 语法高亮配置 简单的计数器示例计数器程序的编写仿真测试 简介 Verilog HDL Verilog HDL 是一种用于设计数字电路的硬件描述语言&#xff0c;它可以用来描述数字电路的功能和结构&#xff0c;并且可…

云服务器AccessKey执行命令

人之所以痛苦&#xff0c;在于追求错误的东西。如果你不给自己烦恼&#xff0c;别人也永远不可能给你烦恼。因为你自己的内心&#xff0c;你放不下。 好好的管教你自己&#xff0c;不要管别人。 漏洞实战 查看所有实例信息 A.exe -a xxx -s xxx ecs -list执行命令 A.exe -a…

新能源汽车充电桩最重要的模块设备是什么

你是否曾经遇到过充电桩无法给你电动汽车提供电源的问题?或者你曾经怀疑过为什么充电桩速度如此缓慢?其实&#xff0c;这一切都可能与充电桩最重要的模块设备——控制主板有关。 交流充电桩由充电桩外壳、控制主板、刷卡模块、计费控制、显示屏、通信模块、继电器、开关电源等…

JumpServer堡垒机

文章目录 JumpServer堡垒机堡垒机介绍堡垒机产生的原因堡垒机主要功能 Jumpserver安装与配置Jumpserver Web界面用户管理资产管理添加Linux主机 命令过来规则创建审计台操作说明会话审计日志审计 工作台操作说明邮箱配置 JumpServer堡垒机 堡垒机介绍 下图来自百度百科 堡垒机…

面试常问八股文之java篇

JAVA篇 1、为什么重写equals方法的时候要重写hashCode方法&#xff1f; 为了不违背“相同对象必须要有相同hash值"的约定&#xff0c;对于基本数据类型比较的是数值是否相等&#xff0c;对于引用类型数据比较的是对象地址是否同等&#xff0c;在object中equal方法也是默…

(学习笔记-IP)IP协议相关技术

DNS 我们在上网的时候&#xff0c;通常使用的方式是域名&#xff0c;而不是IP地址&#xff0c;因为域名方便人类记忆。 那么实现这一技术的就是DNS域名解析器&#xff0c;DNS可以将域名网址自动转换为具体的IP地址。 域名的层级关系 DNS中的域名都是用句点来分隔的&#xff0…

软件升级相关

文章目录 一、升级方案1、移动端升级2、window 升级SquirrelSparkle 一、升级方案 1、移动端升级 腾讯Bugly &#xff0c;支持Android 平台、iOS平台、Cocos2D、Unity3D。 2、window 升级 windows的exe的打包及升级工具 Squirrel Squirrel 是一款免费的开源exe升级工具&a…

NFT市场泡沫破裂了吗?投资NFT是否仍然安全?

近期&#xff0c;NFT市场的价格出现了明显的下跌趋势&#xff0c;许多人开始担心NFT市场是否已经进入了泡沫破裂的阶段。但是&#xff0c;我们需要认真分析这个问题&#xff0c;并且探讨投资NFT是否仍然安全。 NFT&#xff08;Non-Fungible Token&#xff09;是一种非同质化代币…

JMerter安装配置以及使用(笔记记录)

JMerter安装配置以及使用&#xff08;笔记记录&#xff09; 安装JDK安装JMeterJMeter使用元件执行的顺序参数详解参数配置之CSV数据文件设置断言响应断言JSON断言 数据提取XPath提取器JSON提取器 JMeter属性JMeter录制脚本JMeter直连数据库逻辑控制器如果&#xff08;IF&#x…

reference文献引用列表要求

目录 1、基本要求 2、文献格式 3、引用技巧 4、特殊情况&#xff1a; 有新闻和网络文章的引用&#xff1a; 1、基本要求 对于每一篇paper&#xff0c;我们需要按照文中出现的顺序&#xff0c;列出文中引用的所有文献。 对于文献的引用有如下要求&#xff1a; a】顺序要求…

【node.js】03-http模块

目录 一、什么是http模块 二、创建基本的WEB服务器 三、req请求对象 四、res响应对象 五、根据不同的url响应不同的JSON内容 一、什么是http模块 http 模块是 Node.js 官方提供的、用来创建 web 服务器的模块。通过 http 模块提供的 http.createServer() 方法&#xff0c;…

回归预测 | MATLAB实现TCN-BiLSTM时间卷积双向长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现TCN-BiLSTM时间卷积双向长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现TCN-BiLSTM时间卷积双向长短期记忆神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现TCN-BiLSTM时间卷积…

MonsterInsights Pro 8.18.0 Google Analytics + All Addons Pack

MonsterInsights适用于 WordPress 的 Google Analytics&#xff08;分析&#xff09;插件&#xff0c;功能强大 MonsterInsights 是适用于 WordPress 的最佳 Google Analytics&#xff08;分析&#xff09;插件。这些功能使 MonsterInsights 成为市场上功能最强大且用户友好的 …

网络通信原理(第十八课)

网络通信原理(第十八课) 4.1 回顾 1.什么是TCP/IP 目前应用广泛的网络通信协议集 国际互联网上电脑相互通信的规则、约定。 2.主机通信的三要素 IP地址:用来标识一个节点的网络地址(区分网络中电脑身份的地址,如人有名字) 子网掩码:配合IP地址确定网络号 IP路由:网…