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' end5. 使用了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. 注意值,有些只 默认不是为空的 而是 为 null14. 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
时间: 2024-09-08 09:52:16

oracle迁移mysql数据库注意(转)的相关文章

数据恢复:如何恢复Linux中意外删除的Oracle和MySQL数据库

张乐奕 云和恩墨副总经理,Oracle ACE总监,ACOUG 联合创始人 没有删除过数据库的DBA职业生涯是不完整的,删除过数据库还能幸存的DBA一定是订阅了"Oracle"公众号. 昨晚有朋友在微信群中求助讨论,误删除了一个MySQL的数据库,整个恢复过程和以下文章中提到的步骤完全相同,只要MySQL主进程还没有退出,从文件句柄中可以恢复文件最终挽回损失.类似的lsof找到那些被标记为Deleted的文件(以下是参考示意图). 让我们完整的再复习一下这篇文章的步骤,一定要记住这种方

SQL获取第一条记录的方法(sqlserver、oracle、mysql数据库)_MsSql

Sqlserver 获取每组中的第一条记录 在日常生活方面,我们经常需要记录一些操作,类似于日志的操作,最后的记录才是有效数据,而且可能它们属于不同的方面.功能下面,从数据库的术语来说,就是查找出每组中的一条数据.下面我们要实现的就是在sqlserver中实现从每组中取出第一条数据. 例子 我们要从上面获得的有效数据为: 对应的sql语句如下所示: select * from t1 t where id = (select top 1 id from t1 where grp = t.grp o

Ubuntu下完美实现迁移MySQL数据库位置_Mysql

考虑到数据安全问题,准备把服务器上的数据库迁移到刚刚挂载的云硬盘上,研究一下,这个方法是最靠谱的,分享之! 首先建立数据库即将迁移到的目录 复制代码 代码如下: mkdir /media/hdb1/db 复制linux下原数据到新目录下 复制代码 代码如下: cp -dpR /var/lib/mysql/* /media/hdb1/db 给新目录重命属性 复制代码 代码如下: chown mysql:mysql /media/hdb1/db 修改文件"/etc/apparmor.d/usr.sb

linux下迁移mysql数据库存放目录

方法一: 参照windows下的方法,把/var/lib/mysql移到需要的目录,再修改/etc/my.cnf文件,指定数据目录.这方面的教程网上很多,大家可以去搜索一下. 停掉Mysql服务 在my.ini的[mysqld]里有三个设置,路径改成移动之后的路径  代码如下 复制代码 basedir="D:/MySQL-5.0.15b/" datadir="D:/MySQL-5.0.15b/data" innodb_data_home_dir="D:/M

SQL获取第一条记录的方法(sqlserver、oracle、mysql数据库)

Sqlserver 获取每组中的第一条记录 在日常生活方面,我们经常需要记录一些操作,类似于日志的操作,最后的记录才是有效数据,而且可能它们属于不同的方面.功能下面,从数据库的术语来说,就是查找出每组中的一条数据.下面我们要实现的就是在sqlserver中实现从每组中取出第一条数据. 例子 我们要从上面获得的有效数据为: 对应的sql语句如下所示: select * from t1 t where id = (select top 1 id from t1 where grp = t.grp o

oracle,sqlserver,MySQL数据库语句对照表

-- 创建表语句 ORACLE: create table _table_name( column1 varchar2(10) primary key, column2 number(5) not null, memo varchar2(100) ); comment on column _table_name.column1 is '这是column1的注释'; SQLSERVER: create table _table_name( column1 varchar(10) primary k

Oracle to MySQL Goldengate实现增量迁移

第一部分:安装和基本配置 一.环境 两台rhel 6.4虚拟机,分别异构oracle到mysql数据库同步测试 Ip:192.168.0.23 部署oracle 11.2.0.4,goldgate 12.1.2.1.0 for oracle Ip:192.168.0.25 部署mysql5.5.9,goldengate 12.1.2.1.0 for mysql 二.Oracle to Mysql需要注意的地方: 对MySQL支持的数据类型: CHAR|DATETIME|VARCHAR|TIMES

多个数据库-c3p0同时配置Oracle和MySQL,JBDCUtil应如何写

问题描述 c3p0同时配置Oracle和MySQL,JBDCUtil应如何写 我想通过配置c3p0.xml文件在我需要时可以连接oracle或者MySQL数据库,但我不知道jdbcutil该怎么写

python操作mysql数据库实现增删改查

Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: GadFly mSQL MySQL PostgreSQL Microsoft SQL Server 2000 Informix Interbase Oracle Sybase 你可以访问Python数据库接口及API查看详细的支持数据库列表. 不同的数据库你需要下载不同的DB API模块,例如你需要