oracle迁移mysql数据库注意(转)
oracle转mysql修改: 1. substr()
substr( string , 0, 10) 这里测试 必须从 第一位获取 既是 substr(string , 1 , 10)
2. to_char()
只能用做oracle的函数,兼容oracle和mysql故 改为concat( … , '');
这里 使用了两个, 一个 是将类似 int 转为 string
3. select * from (select * from table2) 这里 要加别名
4. nvl函数
被改为 case when length(str)>0 then '处理1' else '处理2' end
5. 使用了oracle 获取当前日期 并格式化成yyyy-MM-dd 和前一天的日期
解决,将获取时间改成了 传值, java 获取当前时间和前一天日期传给数据库(mysql 有自带 的缓存,如果使用了 函数,他不会缓存,另外 为了兼容 mysql 和 ora cle)
6. oracle rownum
select @rownum:=@rownum+1 rownum
from (select @rownum:=0 from table)
7. to_char(to_date(t1.create_date,'yyyy-MM-dd hh24:mi:ss'),'dateFormat’)
修改为了 STR_TO_DATE(t1.create_date, '%Y-%m-%d %h:%i:%s’) DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s'
8. 日期直接加减的含义不同了
比如Oracle中sysdate + 1 变成了sysdate() + interval 1 day(注意如果写成sysdate() + 1 语法还是正确的,但含义是错误的)
查询select sysdate() + 1 from dual 在MySQL得到比如 20080223153234(= 20080223153233 + 1)的数
9. select 'abc' || 'd' from dual 两个数据执行的结果不同(语法都能通过),MySQL要写成select concat('abc' , 'd')的形式
10. autocommit 注意 mysql 这个
11. 去掉别名
delete from table1 t where substr(t.trade_date,1,4)=?
这样的 sql 在 oracle 可以 但是在 mysql 需要把别名去掉
delete from table1 where substr(trade_date,1,4)=?
12. 存储过程
oracle 带参数声明
create or replace procedure THINKXDT.proc_update_seq(v_typename in varchar2,v_num out varchar2)
mysql 带参数声明
DROP PROCEDURE IF EXISTS `proc_update_seq`;
CREATE DEFINER=`root`@`%` PROCEDURE `proc_update_seq`(IN v_typename VARCHAR(200), OUT v_num VARCHAR(200)) oracle 参数为 (名称 IN/OUT 类型)
mysql 参数为 (IN/OUT 名称 类型) oracle 在存储过程声明变量 如下: 名称 类型; (在 begin 之前 create procedure() as 之后声明 mysql 在存储过程声明变量 如下: declare 名称 类型; (在begin 和 end 中声明)
oracle 在 存储过程 入参 有 带有 sys_refcursor 游标的参数,这样的mysql 不能用
oracle 使用了 表.Investor%TYPE 这种声明参数的时候 引用另外一个表的字段类型,mysql 里面最好直接 改为 那个类型 ---------------------------------------------------------------------------
oracle 使用了 %rowtype 这种 声明一条结果集的 mysql不支持,解决(两部)
1.创建临时表
2.是吧这个里面的结果集字段 都单独的声明成一个 单独的变量
oracle 如下:
var_name tablename%rowtype; --声明参数
-- 赋值
select o.* into tablename from oldtablename as o where rownum=1 -- 使用
tablename.a 直接就是 字段a的值 mysql 如下:
-- oralce 的声明参数改为了 创建临时表
CREATE TEMPORARY TABLE IF NOT EXISTS tablename (
SELECT *
FROM oldtablename t
WHERE tag_type=p_tag_type
ORDER BY create_date DESC, id DESC
limit 1
);
-- 表中的字段都要创建一个 变量
declare a int default -1;
declare b int;
-- 赋值
select t.a into a from tablename as t where limit 1;
select t.b into b from tablename as t where limit 1;
-- 使用
-- 直接 使用 变量 a b
-- 使用完后 需要
-- 清除临时表
TRUNCATE TABLE tmpTable;
---------------------------------------------------------------------------
判断 字符是否 为空 可以直接 LENGTH(字符) ,长度 <= 0 即为 空
oracle 中 存储过程可以return
mysql 需要 弄一个标记
如下:
begin 的 改为 label:begin 此时加了一个 label名字的标记
oracle 中 return 改为 leave label; 即可 oracle存储过程中给变量赋值 可以直接 赋值 var_name := 10;
mysql 需要这种修改 set var_name := 10; (mysql 必须加上set) oracle 存储过程返回值 需要在参数里面加上 status_rc out sys_refcursor
然后
open status_rc for
select '-10000' as rscode, 'XXX不能为空' as rsmsg from dual;
return;
mysql 直接
select '-10000' as rscode,
'操作方向格式不正确(只能为‘+’或‘-’)' as rsmsg
from dual;
leave label; mysql 存储过程中的异常处理 如下:
-- 异常处理 begin 后 声明变量的时候加上下面的
declare _err int default 0;
declare continue handler for sqlexception, sqlwarning, not found set _err=1;
-- 代码结尾 加上
if _err=1 then
rollback;
select '-10000' as rscode, 'XXXX异常!' as rsmsg from dual;
leave label;
end if;
13. 注意值,有些只 默认不是为空的 而是 为 null
14. to_char(sysdate, 'yyyy-mm-dd')
改为:DATE_FORMAT(now(), '%Y-%m-%d')
15. 如果字段类型是 varchar 但是 此字段值是数字,想以此字段排序,mysql 需要 查出来后 +0 就会自动转为 int 类型了 http://www.cnblogs.com/loveismile/p/5030911.html
oracle迁移mysql数据库注意(转)的更多相关文章
- oracle迁移mysql数据库注意
oracle转mysql修改: . substr() substr( string , 0, 10) 这里测试 必须从 第一位获取 既是 substr(string , 1 , 10)2. to_ch ...
- Mysql 利用拷贝data目录文件的方式迁移mysql数据库
Mysql 利用拷贝data目录文件的方式迁移mysql数据库 步骤如下: 1.首先要确定data目录 这个问题困扰了我很久,因为网上的帖子大部分只是说拷贝mysql数据库目录下的data文件夹中的数 ...
- 在oracle配置mysql数据库的dblink
本文介绍如何在oracle配置mysql数据库的dblink:虽然dblink使用很占资源:俗称“性能杀手”.但有些场景不得不使用它.例如公司使用数据库是oracle:可能其他部门或者CP合作公司使用 ...
- JAVA项目将 Oracle 转 MySQL 数据库转换(Hibernate 持久层)
项目开发时用的是Oracle数据库,但为了更好的做分布式,做集群,我们要将数据库转成 MySQL! 在数据库迁移中首先要做的事是将 Oracle 的表结构以及数据 克隆到 MySQL 数据库. 这点不 ...
- SQL Server 和 Oracle 以及 MySQL 数据库
推荐:https://www.zhihu.com/question/19866767 三者是目前市场占有率最高(依安装量而非收入)的关系数据库,而且很有代表性.排行第四的DB2(属IBM公司),与Or ...
- 一起学微软Power BI系列-使用技巧(1)连接Oracle与Mysql数据库
说起Oracle数据库,以前没用过Oracle不知道,但是这1年用Oracle后,发现真的是想狂吐槽,特别是那个.NET驱动和链接字符串,特别奇葩.总归是和其他数据库不一样,标新立异,不知道为何.另外 ...
- 用sqlyog迁移mysql数据库
本人大学大学基本就学怎么打游戏了,游戏玩的还不太好,大三的时候突然觉醒报了某培训,然后就出来工作了.这导致许多东西很不扎实,都是在工作中慢慢摸索.今天处理了一个关于mysql数据库迁移的问题,好好总结 ...
- 利用拷贝data目录文件的方式迁移mysql数据库
其实迁移数据库,一般用sql文件就行,把A服务器数据库的表结构和数据等等导出,然后导入到B服务器数据库, 但是这次数据文件过大,大约有40个G,使用命令行导入,效果不是很好,经常在执行过程中报错.卡死 ...
- Sqlserver 连接oracle和mysql数据库 已经oracle导入sqlserver表数据
SQL Server2012创建连接服务器到ORACLE11G 8,百思考不知道原因啊??突然我发现如下:链接服务器—〉访问接口—〉OraOLEDB.Oracle—〉允许进程内没有勾上,但是我想上面的 ...
随机推荐
- 图解UML类与类之间的六中关系
大话设计模式上的一个图,我用EA画出来的: UML中的6大关系相关英文及音标: 依赖关系 dependency [di'pendənsi] 关联关系 association [ə,səuʃi' ...
- 使用Curl进行抓取远程内容时url中文编码问题
PHP中对于URL进行编码,可以使用 urlencode() 或者 rawurlencode(),二者的区别是前者把空格编码为 '+',而后者把空格编码为 '%20',不过应该注意的是,在编码时应该只 ...
- hdu 4715 Difference Between Primes (打表 枚举)
Difference Between Primes Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- QML中多样化的ListModel(MultiDelegate)
在QML的官方例子里面, 基本上都是一样的Delegate, 也就是说不管数据怎样, 样式都是不变的. 如果我们想要根据不同的数据类型来显示不同的UI该怎么办? 这里有一个例子. DataBank L ...
- android studio下的NDK开发详解(一)
源地址:http://www.voidcn.com/blog/chengkaizone/article/p-5761016.html 好记性不如烂笔头,开始坚持写博客,学一点记一点,只为了生活更好. ...
- [计算机基础]关于实体( Entity )和模型( Model )
实体与模型的浅析 在日常开发过程中经常看到Entity,Model,DataModel,它们之间到底有什么异同?下面是我个人的一些理解. 一.Entity,Model,它们是什么? 维基百科描述: 实 ...
- ZeroClipboard插件:兼容各浏览器网页复制功能
常规利用JS编写的网页复制功能只对IE有效,无法做到兼容其它浏览器,代码如下: function copyToClipBoard(){ var clipBoardContent="" ...
- OpenCV-Python教程(4、形态学处理)
提示: 转载请详细注明原作者及出处,谢谢! 本文介绍使用OpenCV-Python进行形态学处理 本文不介绍形态学处理的基本概念,所以读者需要预先对其有一定的了解. 定义结构元素 形态学处理的核心就是 ...
- 建立地方Jekyll周边环境
近期使用github建立一个博客,只是要了解markdown语法,因为markdown后写的不是立即可见.所以,每一个成品都要经过在线调试,在线调试已经上线的文章,每次上线有反复git add, gi ...
- Android开发周报:Android L默认加密用户数据
Android开发周报:Android L默认加密用户数据 新闻 <iCloud前车之鉴,Android L默认开启加密功能>:iCloud 艳照风波再起,第二波女星照片流出,大量女星的裸 ...