ares-sdk初始开发测试使用的是oracle数据库,由于宁波通商的特殊需要,必须把数据库环境从oracle转向mysql。 现对转换过程中出现的问题及经验总结如下:

主键生成策略

创建一个专门记录序列的表sequence,记录有当前序列号,序列的间隔如+1

创建记录当前序列的表

DROP TABLE IF EXISTS sequence;

CREATE TABLE sequence (

name VARCHAR(50) NOT NULL,

current_value INT NOT NULL,

increment INT NOT NULL DEFAULT 1,

PRIMARY KEY (name)

) ENGINE=InnoDB;

INSERT INTO sequence VALUES ('MovieSeq',3,5);

创建一个获取当前序列的function

DROP FUNCTION IF EXISTS currval;

CREATE FUNCTION currval (seq_name VARCHAR(50))

RETURNS INTEGER

CONTAINS SQL

BEGIN

DECLARE value INTEGER;

SET value = 0;

SELECT current_value INTO value

FROM sequence

WHERE name = seq_name;

RETURN value;

END;

获取下一个数值..先在sequence里面调用update当前最大数值+1然后再调用currval获得当前数值

DROP FUNCTION IF EXISTS nextval;

DELIMITER $

CREATE FUNCTION nextval (seq_name VARCHAR(50))

RETURNS INTEGER

CONTAINS SQL

BEGIN

UPDATE sequence

SET current_value = current_value + increment

WHERE name = seq_name;

RETURN currval(seq_name);

END$

DELIMITER ;

DROP FUNCTION IF EXISTS setval;

DELIMITER $

CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER)

RETURNS INTEGER

CONTAINS SQL

BEGIN

UPDATE sequence

SET current_value = value

WHERE name = seq_name;

RETURN currval(seq_name);

END$

DELIMITER ;

如果以上语句执行有异常请先执行这句:set global logbintrustfunctioncreators=TRUE;

插入时的主键生成:

mysql: SELECT MMC.NEXTVAL('SEQ_MD_ENTITY_ATTRIBUTE')

oracle: select MMC.SEQ_MD_ENTITY_ATTRIBUTE.nextval from dual

日期处理

mysql : DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s')

oracle: TO_CHAR(SYSDATE,'YYYY-MM-DD hh24:mi:ss')

nvl函数

mysql: ifnull(A.USER_KPI,0)

oracle: NVL(A.USER_KPI,0)

to_number

oracle 的 to_number

mysql不需要

关键字、保留字

涉及到关键字,mysql关键字需要加上``号

mysql: PARA_VALUE as `KEY`

oracle : PARA_VALUE as KEY

rownum

Unknown column 'rownum' in 'where clause'

oracle自定义sql中如果使用了rownum=1 mysql中可以写成limit 1

大小写问题

在oracle中一般情况下不区分大小写

但在MySQL中,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。

解决的办法是把mysql的数据库名和oracle的大小写保持一致,

表名与应用程序中sql字符串中的表名保持一致,

如果应用程序中字段名用了双引号,那请把sql中的字段名大小写与双引号里的字符保持一致。

如果你的应用程序所引用的表名、字段没有统一大小写,那麻烦就大了。

字符串截取

mysql:

截取log_data从逗号开始之后的字符:

SELECT substring_index(log_data,',',-1)

FROM nbts.log where event_id='150002' and log_id ='a2a421734c7e47dd8a8b';

截取log_data从逗号开始之前的字符:

SELECT substring_index(log_data,',',1)

FROM nbts.log where event_id='150002' and log_id ='a2a421734c7e47dd8a8b';

oracle :

截取log_data从逗号开始之后的字符:

SELECT SUBSTR(log_data, INSTR(log_data, ',', 1, 1) +1) AS app_ver_id

FROM nbts.log where event_id='150002' and log_id ='a2a421734c7e47dd8a8b';

截取log_data从逗号开始之前的字符:

SELECT SUBSTR(log_data,0,INSTR(log_data, ',', 1, 1) - 1) AS app_ver_id

FROM nbts.log where event_id='150002' and log_id ='a2a421734c7e47dd8a8b';

字符串格式化

mysql:CONCAT

oracle:TO_CHAR

主键长度问题

在迁移到mysql后可能会出现主键长度太短,需要增加长度。

http://www.cnblogs.com/kunpengit/p/4462656.html

oracle 转成 mysql_oracle转mysql总结(转)相关推荐

  1. oracle日期导出mysql_oracle的数据导入到mysql中,遇到一个时间转换问题

    Manager进程:需要源端跟目标端同时运行,主要作用是监控管理其它进程,报告错误,分配及清理数据存储空间,发布阈值报告等 Extract进程:运行在数据库源端,主要用于捕获数据的变化,负责全量.增量 ...

  2. mysql换成oracle_从mysql转换到oracle数据库

    最近做了几个项目,我对项目的要求(有些也是客户的要求)都是既要能用mysql数据库,又要能用oracle数据库,开发时尽量用mysql,等到发布时要求两者都能适应.因为两种数据库还是许多具体的应用有些 ...

  3. oracle抽取mysql_oracle到mysql,oracle到oraclel的多表批量数据迁移,定期任务抽取数据-kettle的使用...

    一.背景 上一篇文章(单表数据迁移)用kettle实现了一张表的数据迁移.但实际情况中,数据库会有几百,几千张表,而kettle的表输入和表输出只能选择一张表,我们不可能一个个地填写表名.这时候,我们 ...

  4. Java框架抽离的一些经历1:MYSQL数据库安装和 Oracle转换成Mysql数据库

    本篇记录独自抽离部署一个java项目,方便以后查阅参考. 开发语言:JSP 部署项目环境:JDK1.8 + Mysql8.023 开发工具:IDEA 代码同步工具:SVN 一.数据库 之前数据库使用的 ...

  5. oracle类型sql转为mysql_Oracle和MySql之间SQL区别(等效转换以及需要注意的问题)...

    >本篇博文是Oracle和MySQL之间的等效SQL转换和不同,目前市面上没有转换两种SQL的工具,小编觉得以后也不一定会有,于是在业余时间整理了一下,如果有什么错误之处请留言告知,小编也是刚 ...

  6. 淘宝 oracle mysql_Oracle 与 MySQL 的区别-阿里云开发者社区

    Oracle 与 MySQL 的区别 1.在ORACLE中用select * from all_users显示所有的用户,而在MYSQL中显示所有数据库的命令是show databases.对于我的理 ...

  7. mysql命令行导入dmp文件,oracle的备份文件(dmp)导入mysql数据库方法

    搜索热词 这个过程分为两步,当然了,如果你本身有安装oracle数据库,那就不要看这个文章了,如果你不想为了一个几十M的dmp文件去安装一个oracle那你可以参考本文章的方法. 第一步:把dmp文件 ...

  8. Java List排序 java ListMap 排序 Java listmap 模拟 oracle 排序 Java listmap 模拟 mysql 排序

    Java List排序 java ListMap 排序 Java listmap 模拟 oracle 排序 Java listmap 模拟 mysql 排序 一.概述 近期的开发工作中,遇到一个需求: ...

  9. Oracle中to_char函数和MySQL中的str_to_date函数区别

    标题Oracle中to_char函数和MySQL中的str_to_date函数 1. str_to_date()----->相当于Oracle中的to_char(): 字符串转换为日期格式 (1 ...

最新文章

  1. Pytorch系列教程-使用Seq2Seq网络和注意力机制进行机器翻译
  2. jzoj4249-游戏【贪心】
  3. Scrapy学习-25-Scrapyd部署spider
  4. docker修改php.ini,docker部署更改php的upload_max_filesize
  5. Uninterruptible Sleep(不可中断的睡眠)
  6. java arraylist add时默认调用tostring_java中如何调用toString命名的方法?
  7. 爱了爱了!阿米洛熊猫机械键盘cherry樱桃粉轴白灯,写代码神器!免费包邮送到家!...
  8. 录像机输入几次错误密码后被锁定
  9. QGIS制作导出三维模型并发布
  10. 会议论文投稿到接收流程【手里有粮心中不慌】
  11. 负反馈放大器电路详解
  12. C语言二维数求矩阵每行的最大值与最小值
  13. 在 IIS 上构建静态网站
  14. Git合并操作之merge、rebase、squash详解
  15. 无人驾驶工业车辆企业「未来机器人」完成数亿元融资
  16. 基于matlab的圆偏振光/两相交流电模拟-导出gif
  17. 码率自适应技术 (Adaptive Bitrate Streaming,ABR)
  18. 完整的口袋妖怪数据集
  19. MySQL 创建函数, MySQL定义函数实现汉字转拼音 MySQL汉字转拼音MySQL汉字生成拼音字符串
  20. 自动化药房出药升降机选型设计

热门文章

  1. 史上最新最全的来自成都的Azure系列文章,助你上云!老少皆宜,童叟无欺!
  2. idea 注册码 实测可用
  3. 你心中有这样的人吗?
  4. Javascript技术实现真正的网上试听
  5. 李开复 —— 给中国学生的第四封信:大学四年应是这样度过
  6. 华为第二批“十大军团”正式成立!
  7. 快手宣布任命金秉为首席财务官 向程一笑汇报
  8. 鸿蒙系统即将发布,华为鸿蒙商标获转让
  9. 盒马要造车?网友调侃:不会就搞个车轮卷蛋糕吧
  10. 研究机构:全球半导体厂商今年资本支出1081亿美元