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:[email protected]+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-08-01 10:44:21

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

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函数 被改为

linux系统下迁移mysql数据库文件

linux下(这里是centos),mysql安装后,数据库的数据默认存放在/var/lib/mysql目录下,如果该目录下挂载的磁盘空间很少,不够用,需要迁移到其他的目录位置. 方法一: 参照windows下的方法,把/var/lib/mysql移到需要的目录,再修改/etc/my.cnf文件,指定数据目录.这方面的教程网上很多,大家可以去搜索一下. 方法二: 使用linux下的软连接方法,具体操作如下:(以迁移到/home/mysql/目录为例) 先停止mysql: /etc/init.d/

hibernate4中oracle,sqlserver,mysql数据库的sql方言配置(SQL Dialects)

hibernate4中oracle,mysql,sqlserver数据库的sql方言配置(SQL Dialects) 数据库类型 Hibernate sql方言 DB2 org.hibernate.dialect.DB2Dialect DB2 AS/400 org.hibernate.dialect.DB2400Dialect DB2 OS390 org.hibernate.dialect.DB2390Dialect PostgreSQL 8.1 org.hibernate.dialect.Po

Sqlserver 连接oracle和mysql数据库

如果需要mysql和oracle互相转化数据,可以先把mysql数据读到sqlserver的表中,然后从sqlserver 插入到oracle中. 或者相反从oracle读到sqlserver然后从sqlserver到mysql,把sqlserver作为一个中间的桥梁 通过SQL Server操作MySQL的步骤和方法 2011-07-11 17:36:01|  分类: 数据库 |  标签:sql  server  mysql  odbc  |举报|字号 订阅 下载LOFTER客户端 在多种数据

Ubuntu下迁移MySQL数据库文件目录

用Ubuntu的apt包管理工具安装的mysql数据库,默认将数据库文件保存在/var/lib/mysql目录下,时间久了数据库越来越大,所以准备挂载个新的硬盘专门存放mysql数据库. 1.确定mysql数据库文件存放目录 一般默认是在/var/lib/mysql目录下.先登录自己的mysql数据库,比如我用root账户登录,然后使用下面查询语句查询: show variables like '%dir%'; 得到数据库文件配置信息: 可以看到其中datadir的值为/var/lib/mysq

Oracle和Mysql数据库技术

1.查资料,回答下面问题: a.Oracle公司的诞生和发展 (1)1977年程序员埃里森和另外两名程序员创建了软件开发实验室(Software Development Laboratories).(2)1970年IBM的一名研究人员写了一篇名为<大型共享数据库的关系数据模型>的论文,埃里森3人受到这篇文章的启发,决定构建一种新型数据库,称为关系数据库系统(relational database system).(3)他们的第一个项目是为美国政府做的,他们给它取名为”Oracle”,因为他们认

java后台框架 springmvc mybatis(sqlsever oracle 和 mysql数据库)

获取[下载地址]   QQ: 313596790   [免费支持更新]支持三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体[新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]A 代码生成器(开发利器);      增删改查的处理类,service层,mybatis的xml,SQL( mysql   和oracle)脚本,   jsp页面 都生成   就不用写搬砖的代码了,生成的放到项目里,可以直接运行B 阿里巴巴数据库连接池druid

java后台框架 springmvc mybatis oracle 和 mysql数据库

获取[下载地址]   QQ: 313596790   [免费支持更新]A 代码生成器(开发利器);全部是源码     增删改查的处理类,service层,mybatis的xml,SQL( mysql   和oracle)脚本,   jsp页面 都生成   就不用写搬砖的代码了,生成的放到项目里,可以直接运行B 阿里巴巴数据库连接池druid;  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都有明显的优势C 安全权限框架shiro ;  Shiro 是一个用

ORACLE 迁移MYSQL 随笔

1.把服务器上的ORALCE 数据库导成DMP,然后导入本机的临时库 2.先把ORACLE 表中的DATE 改为TIMESTAMP; a.先建立个表 create table type_table_info ( table_name varchar2(30), column_name varchar2(30), data_type varchar2(100) ) B.然后简历存储过程 create or replace procedure convert_date_to_timestamp /*