oracle 转成 mysql_oracle转mysql总结(转)
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总结(转)相关推荐
- oracle日期导出mysql_oracle的数据导入到mysql中,遇到一个时间转换问题
Manager进程:需要源端跟目标端同时运行,主要作用是监控管理其它进程,报告错误,分配及清理数据存储空间,发布阈值报告等 Extract进程:运行在数据库源端,主要用于捕获数据的变化,负责全量.增量 ...
- mysql换成oracle_从mysql转换到oracle数据库
最近做了几个项目,我对项目的要求(有些也是客户的要求)都是既要能用mysql数据库,又要能用oracle数据库,开发时尽量用mysql,等到发布时要求两者都能适应.因为两种数据库还是许多具体的应用有些 ...
- oracle抽取mysql_oracle到mysql,oracle到oraclel的多表批量数据迁移,定期任务抽取数据-kettle的使用...
一.背景 上一篇文章(单表数据迁移)用kettle实现了一张表的数据迁移.但实际情况中,数据库会有几百,几千张表,而kettle的表输入和表输出只能选择一张表,我们不可能一个个地填写表名.这时候,我们 ...
- Java框架抽离的一些经历1:MYSQL数据库安装和 Oracle转换成Mysql数据库
本篇记录独自抽离部署一个java项目,方便以后查阅参考. 开发语言:JSP 部署项目环境:JDK1.8 + Mysql8.023 开发工具:IDEA 代码同步工具:SVN 一.数据库 之前数据库使用的 ...
- oracle类型sql转为mysql_Oracle和MySql之间SQL区别(等效转换以及需要注意的问题)...
>本篇博文是Oracle和MySQL之间的等效SQL转换和不同,目前市面上没有转换两种SQL的工具,小编觉得以后也不一定会有,于是在业余时间整理了一下,如果有什么错误之处请留言告知,小编也是刚 ...
- 淘宝 oracle mysql_Oracle 与 MySQL 的区别-阿里云开发者社区
Oracle 与 MySQL 的区别 1.在ORACLE中用select * from all_users显示所有的用户,而在MYSQL中显示所有数据库的命令是show databases.对于我的理 ...
- mysql命令行导入dmp文件,oracle的备份文件(dmp)导入mysql数据库方法
搜索热词 这个过程分为两步,当然了,如果你本身有安装oracle数据库,那就不要看这个文章了,如果你不想为了一个几十M的dmp文件去安装一个oracle那你可以参考本文章的方法. 第一步:把dmp文件 ...
- Java List排序 java ListMap 排序 Java listmap 模拟 oracle 排序 Java listmap 模拟 mysql 排序
Java List排序 java ListMap 排序 Java listmap 模拟 oracle 排序 Java listmap 模拟 mysql 排序 一.概述 近期的开发工作中,遇到一个需求: ...
- Oracle中to_char函数和MySQL中的str_to_date函数区别
标题Oracle中to_char函数和MySQL中的str_to_date函数 1. str_to_date()----->相当于Oracle中的to_char(): 字符串转换为日期格式 (1 ...
最新文章
- Pytorch系列教程-使用Seq2Seq网络和注意力机制进行机器翻译
- jzoj4249-游戏【贪心】
- Scrapy学习-25-Scrapyd部署spider
- docker修改php.ini,docker部署更改php的upload_max_filesize
- Uninterruptible Sleep(不可中断的睡眠)
- java arraylist add时默认调用tostring_java中如何调用toString命名的方法?
- 爱了爱了!阿米洛熊猫机械键盘cherry樱桃粉轴白灯,写代码神器!免费包邮送到家!...
- 录像机输入几次错误密码后被锁定
- QGIS制作导出三维模型并发布
- 会议论文投稿到接收流程【手里有粮心中不慌】
- 负反馈放大器电路详解
- C语言二维数求矩阵每行的最大值与最小值
- 在 IIS 上构建静态网站
- Git合并操作之merge、rebase、squash详解
- 无人驾驶工业车辆企业「未来机器人」完成数亿元融资
- 基于matlab的圆偏振光/两相交流电模拟-导出gif
- 码率自适应技术 (Adaptive Bitrate Streaming,ABR)
- 完整的口袋妖怪数据集
- MySQL 创建函数, MySQL定义函数实现汉字转拼音 MySQL汉字转拼音MySQL汉字生成拼音字符串
- 自动化药房出药升降机选型设计