一、在oracle上创建函数:

CREATE OR REPLACE
procedure convert_date_to_timestamp
isv_query_base_sql varchar2(100) := 'SELECT table_name, column_name, data_type FROM all_tab_cols WHERE table_name = ''';v_query_table_sql varchar2(150);v_alter_sql varchar2(100);type table_type is table of type_table_info%rowtype;table_array table_type;beginfor c_tabs in (select table_name from user_tables where table_name <> 'type_table_info')loopv_query_table_sql := v_query_base_sql || c_tabs.table_name || '''';execute immediate v_query_table_sql bulk collect into table_array;for i in table_array.first .. table_array.lastloop--DBMS_OUTPUT.put_line(table_array(i).column_name || ':' || table_array(i).data_type);if table_array(i).data_type = 'DATE' thenv_alter_sql := 'alter table ' || table_array(i).table_name || ' modify ' || table_array(i).column_name || ' timestamp';DBMS_OUTPUT.put_line(table_array(i).column_name || ': ' || v_alter_sql);execute immediate v_alter_sql;end if;end loop;end loop;
end convert_date_to_timestamp;

**二、安装NAVICAT Premium,网上有好多教程,直接下载并破解安装,最好在官网下载,然后破解。官网地址:**https://www.navicat.com.cn/products
三、使用navicat进行转换:
打开navicat链接oracle和mysql库,作为程序员,这个一般都会。
点击数据传输:

选择数据库:

下一步,选择你要转换的表:(建议每次少选一点,一次50张表左右,如果太多会失败)

点击开始,进行转换。(转换过程中会报错,你要自己查看报错信息,然后更改表结构,当mysql成功后,在转换回去。)
四、转换mysql的字段类型
Oracle的NUMBER数值类型被自动转换为decimal类型,需手工做以下字段类型/结构修改:
(1)对于存放整型值的字段,需修改为int型。
(2)对于存放非整型字段(例如金额、单价等),如果在Oracle中未限定小数位数,则转换后小数位数自动变为 0,需根据实际需要修改小数位数。(金额8位,数量3位)
2、Oracle中varchar2的长度超过255的字段,会被自动转为text类型,需要手工改为varchar(实际长度)。
3、Oracle中的BLOB字段类型自动被转换为longblob,因为longblob类型的查询的时候比较慢,需要手工改为mediumBlob类型
五、在mysql上创建oracle的函数
oracle上的add_months函数

CREATE DEFINER=`root`@`%` FUNCTION `add_months`(f_date datetime ,f_val int) RETURNS datetime
BEGINDECLARE result datetime;SET result = date_add(f_date,INTERVAL f_val MONTH);RETURN result;
END

getData()函数

CREATE DEFINER=`root`@`%` FUNCTION `getDate`() RETURNS datetime
BEGINDECLARE result datetime;RETURN NOW();
END

GetTmpTableName()获取表名:

CREATE DEFINER=`root`@`%` FUNCTION `GetTmpTableName`() RETURNS varchar(64) CHARSET utf8
BEGINDECLARE RetTableName varchar(64);SELECT REPLACE(UUID(),'-','') INTO RetTableName;SET RetTableName = CONCAT('TMP_',RetTableName);RETURN RetTableName;
END

nvl函数:

CREATE DEFINER=`root`@`%` FUNCTION `nvl`(f_judgevalue varchar(255), f_value varchar(255)) RETURNS varchar(255) CHARSET utf8
BEGINDECLARE result VARCHAR(255);SET result = IFNULL(f_judgevalue, f_value);RETURN result;
END

sys_guid()函数:

CREATE DEFINER=`root`@`%` FUNCTION `sys_guid`() RETURNS varchar(255) CHARSET utf8
BEGINRETURN UUID();
END

to_char函数:

CREATE DEFINER=`root`@`%` FUNCTION `to_char`(f_date datetime, f_format varchar(255)) RETURNS varchar(255) CHARSET utf8
BEGINDECLARE result VARCHAR(255);SET f_format = UPPER(f_format);IF f_format = 'YYYY-MM-DD' THENSET f_format = '%Y-%m-%d';END IF;IF f_format = 'YYYYMM' THENSET f_format = '%Y%m';END IF;IF f_format = 'YYYY-MM' THENSET f_format = '%Y-%m';END IF;IF f_format = 'YYYY' THENSET f_format = '%Y';END IF;IF f_format = 'MM' THENSET f_format = '%m';END IF;IF f_format = 'DD' THENSET f_format = '%d';END IF;SET result = date_format(f_date, f_format);RETURN result;
END

to_data函数:

CREATE DEFINER=`root`@`%` FUNCTION `to_date`(f_str varchar(255) ,f_format varchar(255)) RETURNS varchar(255) CHARSET utf8
BEGINDECLARE result VARCHAR(255);SET f_format = TRIM(UPPER(f_format));IF f_format = 'YYYY-MM-DD' THENIF LENGTH(f_str) > 10 THENSET f_str = SUBSTRING(f_str , 1 , 10);END IF;SET f_format = '%Y-%m-%d';END IF;IF f_format = 'YYYY-MM-DD HH24:MI:SS' THENSET f_format = '%Y-%m-%d %H:%i:%s';END IF;SET result = STR_TO_DATE(f_str,f_format);RETURN result;
END

getChildList()函数:

CREATE DEFINER=`root`@`%` FUNCTION `getChildList`(rootId INT) RETURNS varchar(1000) CHARSET utf8
BEGIN DECLARE pTemp VARCHAR(21845);  DECLARE cTemp VARCHAR(21845); SET pTemp = '$';  SET cTemp =cast(rootId as CHAR); WHILE cTemp is not null DO  SET pTemp = concat(pTemp,',',cTemp);  SELECT group_concat(uqaccountid) INTO cTemp FROM tgl_accounts   WHERE FIND_IN_SET(uqparentid,cTemp)>0; END WHILE;  RETURN pTemp;  END

func_get_split_string_total函数:

CREATE DEFINER=`root`@`%` FUNCTION `func_get_split_string_total`(f_string varchar(1000),f_delimiter varchar(5)) RETURNS int(11)
BEGINreturn 1+(length(f_string) - length(replace(f_string,f_delimiter,'')));
END

func_get_split_string函数:

CREATE DEFINER=`root`@`%` FUNCTION `func_get_split_string`(f_string varchar(1000),f_delimiter varchar(5),f_order int) RETURNS varchar(255) CHARSET utf8
BEGINdeclare result varchar(255) default '';set result = reverse(substring_index(reverse(substring_index(f_string,f_delimiter,f_order)),f_delimiter,1));return result;
END

注:大家转换的时候,直接把这些函数创建了,这些事oracle的常用函数,如果你用到其他oracle函数,你就要自己重写。
六、修改程序
这一点最为麻烦,你要修改所有的代码,oracle的ROWNUM关键字要改成mysql的limit。
七、注意的问题
1、Oracle的NUMBER数值类型被自动转换为decimal类型,需手工做以下字段类型/结构修改:
(1)对于存放整型值的字段,需修改为int型。
(2)对于存放非整型字段(例如金额、单价等),如果在Oracle中未限定小数位数,则转换后小数位数自动变为 0,需根据实际需要修改小数位数。(金额8位,数量3位)
2、Oracle中varchar2的长度超过255的字段,会被自动转为text类型,需要手工改为varchar(实际长度)。
3、Oracle中的BLOB字段类型自动被转换为longblob,因为longblob类型的查询的时候比较慢,需要手工改为mediumBlob类型

oracle转mysql数据库相关推荐

  1. mysql查询数据库第一条记录_SQL获取第一条记录的方法(sqlserver、oracle、mysql数据库)...

    Sqlserver 获取每组中的第一条记录 在日常生活方面,我们经常需要记录一些操作,类似于日志的操作,最后的记录才是有效数据,而且可能它们属于不同的方面.功能下面,从数据库的术语来说,就是查找出每组 ...

  2. Mybatis代码生成适配Oracle和Mysql数据库_01

    文章目录 1. 依赖 2. generatorConfig.xml 开源项目地址: https://gitee.com/gb_90/Oracle_Mysql_Generate Git克隆方式: git ...

  3. Oracle、Mysql数据库编程开发基本操作命令语法脚本_基础篇(入门级)

    Oracle.Mysql数据库开发基本操作命令语法脚本_基础篇(入门级) 文章目录 Oracle.Mysql数据库开发基本操作命令语法脚本_基础篇(入门级) 一.数据库中常用的字段类型 二.操作数据库 ...

  4. ezdml 支付mysql 吗_EZDML数据库表结构设计器_设计sql、oracle、mysql数据库表结构 V2.39 免费版...

    很多程序员或者网站站长在设计网站数据库的时候都要进行表结构设计,如果您不想操作原始的数据库工具之想简单设计一下数据库表结构,那么你不妨试试这款EZDML数据库表结构设计器,可以快速设计sql.orac ...

  5. 一起学微软Power BI系列-使用技巧(1)连接Oracle与Mysql数据库

    说起Oracle数据库,以前没用过Oracle不知道,但是这1年用Oracle后,发现真的是想狂吐槽,特别是那个.NET驱动和链接字符串,特别奇葩.总归是和其他数据库不一样,标新立异,不知道为何.另外 ...

  6. oracle语句mysql数据库名称_查询oracle数据库中当前数据库所有表的名称

    SQL查询数据库中所有指定类型的字段名称和所在的表名 --查询数据库中所有指定类型的字段名称和所在的表名 --eg: 下面查的是当前数据库中 所有字段类型为 nvarchar(max) 的字段名和表名 ...

  7. 查询 oracle_关于oracle和mysql数据库的查询问题

    近期在写mysql数据库报表时,需要给查询排序后的数据增加一列序号,用来统计查询数据的排名,在这里遇到一个视图和排序冲突的问题. Part 1 在oracle数据库中可以直接给查询语句增加一列ROWN ...

  8. 开始构建你的DBaaS:使用zCloud自动化安装部署Oracle和MySQL数据库

    更多精彩,请点击上方蓝字关注我们! 云和恩墨自研的zCloud是目前业内对商业数据库(Oracle)及开源数据库(MySQL.Redis.PostgreSQL)支持都十分完善的数据库云管平台,可以应对 ...

  9. 达梦、Oracle、mysql数据库排序时对空值的处理

    在进行时间排序时,如果不做处理,查询出来的数据空值字段数据将会出现在最前面:如下 达梦数据库: SELECT * FROM tdcb.EQUIPMENT_LEIMU ORDER BY ISNULL(U ...

最新文章

  1. 【翻译】CryEngine3下的Hair Shader
  2. Java开发者还用SSH?大清朝都亡了,你知道吗?
  3. 苹果计算机系统是什么,苹果电脑系统和Win电脑系统有什么不同
  4. Android 常用的adb命令
  5. 从三方面分析,Java程序员如何晋升为高薪Java架构师?
  6. 第15课 模块与包
  7. 互联网早报 | 2月2日 星期二 | 小米之家完成江苏河南县级全覆盖;知乎正式启动首部科幻剧;盼达用车宣布暂停运营...
  8. 【Flutter实战】六大布局组件及半圆菜单案例
  9. js之清除Cookie
  10. 你好法语A1语法单元汇总(unité 4)
  11. 电子信息工程跨考计算机武大,我考研的一些经历吧——电气(武汉大学)
  12. GeneXus学习笔记-Excel导出
  13. myeclipse自定义注释快捷键
  14. 图片生成base64格式
  15. 【计算机视觉与深度学习】全连接神经网络(一)
  16. 智能云网 解决方案白皮书
  17. 用python3实现的六壬栻盘程序
  18. 《测绘管理与法律法规》——不动产测绘管理
  19. 【HTML+CSS+JS】简单的登录注册验证
  20. java奥特曼对战小怪兽_“奥特曼攻打小怪兽”java打怪升级第一步

热门文章

  1. 如何成为SAP行业专家
  2. 敢问路在何方——项目经理成长手记
  3. 利用SAP内置功能生成Search Help
  4. 验证码生成java_JAVA-验证码生成
  5. sql跨数据库如何访问linux 下mysql_SQL跨数据库访问linux或windows的mysql和定时作业 (转)...
  6. .net mvc 报表_Web在线报表设计器使用指南
  7. php_rce-攻防世界-web-ThinkPHP版本5的相关漏洞
  8. 如何在python中构造想要的时间戳参数
  9. 【python教程】IO文件操作的常见用法
  10. python赋值方式