Mysql迁移到Oracle简析

  

本文主要给大家介绍Mysql迁移到Oracle简析,文章内容都是笔者用心摘选和编辑的,Mysql迁移到Oracle简析具有一定的针对性、对大家的参考意义还是比较大的、下面跟笔者一起了解下主题内容吧。

,

1。数据类型的选择。

数值类型:

Mysql有两种类型的数字:整数(整数)和实数(实数)。


存储整数可以选择:非常小的整数,短整型,MEDIUMINT, INT,长整型数字,,分别对应8、16、24、32、64位存储空间。他们可存储的范围从2的N - 1次方到2的N - 1次方1,其中N是存储空间的位数。

整数类型有可选的无符号属性,表示不允许负的值,这大致可以使正数的上限提高一倍。例如非常小的整数,无符号可以存储的范围是0 ~ 255,而非常小的整数的存储范围是128 - 127。

 Mysql迁移到Oracle简析

实数是带有小数部分的数字.DECIMAL类型用于存储精确的小数。因为额外的计算和开销,应该尽量只是在对小数进行精确计算时才使用。在数据量比较大时,可以考虑用长整型数字代替小数。

,

相比较而言,甲骨文有号码,int,浮动,binary_float, binary_double,数字类型


数量类型在Oracle中会占用0 ~ 22个字节的存储空间,是一种变长数据类型,采用Oracle内部算法,是一种软数据类型,因此具有较好的数据精确度,通用性和可移植性较强


其中如下的这些类型都是数量从类型映射而来。

数字(p, s):完全映射至数(p, s)。如果p未指定,则默认为38。

小数(p, s)或12月(p, s):完全映射至数(p, s)。如果p为指定,则默认为38

整数或int:完全映射至数量(38)类型。

SMALLINT:完全映射至数量(38)类型

由于存储结构上的不同,binary_float和binary_double较数字,可以存储更大范围的数据,但是其精度并不如号码。如果存储金融数据,建议使用号码。

而如果进行科学运算,建议使用binary_float和binary_double,因为浮点型数据使用的是硬件计算,其计算效率是非常高的。


对于Mysql中的各种int类型,建议统一都对应到甲骨文的数量类型。(数量(p, s)也是完全映射到数字类型的,所以无需设置精度)


字符类型:

Mysql使用VARCHAR和CHAR两种类型。

VARCHAR是变长类型

字符是定长类型

CHAR这类定长类型,会删除所有末尾的空格,在数据存储和比较的时候,某些行为就难以理解。所以正常选择VARCHAR为好。

,

甲骨文中CHAR属于定长类型会使用空格进行填充。

而varchar2采用变长的方式存储数据,相对会节省空间。在存储效率上,与字符不相上下。

另外字符类型同样存在末尾空格的问题。

对于Oracle类型,由于工作习惯以及存储的要求来考虑,应该尽可能的选择varchar2。

,

2. Mysql中分隔符的作用


该关键字是告诉解释器,该段命令是否已经结束,Mysql是否可以执行后续脚本。

 DELIMITER ;
  DROP  PROCEDURE  IF  EXISTS  p_contract;,,,该语句可以立即执行
  DELIMITER  $ $,,,,,,并没有以分号结束,后续语句等待遇到$ $时执行。
  CREATE  PROCEDURE  p_contract ()
  ,才能开始
  。。。。。。
  。。。。。
  ,,,最终获得$ $,,,,执行中间的语句。
  DELIMITER ; 

3。声明继续处理程序没有找到


若没有数据返回,程序继续,并将变量IS_FOUND设为0,这种情况是出现在选择XX向XXX,表名的时候发生的。


4. UNIX时间戳与日期的相互转换


Mysql中日期以及时间函数,推荐你可以看一下这篇文章:http://www.cnblogs.com/redfox241/archive/2009/07/23/1529092.html

,

甲骨文获取UTC时间:

 select  to_char (sys_extract_utc (systimestamp) & # 39; yyyy-mm-dd  hh34: mi: ss # 39;),得到,双,,,,,,,UTC时间

,

Mysql中UNIX时间戳与日期的相互转换

UNIX时间戳转换为日期用函数:FROM_UNIXTIME ()


选择FROM_UNIXTIME (1410318106),

日期转换为UNIX时间戳用函数:UNIX_TIMESTAMP ()

选择UNIX_TIMESTAMP (& # 39; 2014-09-10 11:01:46& # 39;);

, DATE_FORMAT (FROM_UNIXTIME (& # 39; 1410318106 & # 39; & # 39; Y % - % - % d % h: % m: % & # 39;), & # 39; Y - % - % d %, % h: % m: % & # 39;)

甲骨文并没有这类的转换函数,需要自己写(如下的写法也来自网络)

,

<>之前,甲骨文时间日期型转换为UNIX时间戳   replace  create ,或是;function  bill_query.oracle_to_unix (in_date 日期),return  number    开始   ,,   ,才能返回(,(in_date  -TO_DATE(& # 39; 19700101 & # 39; & # 39;名称# 39;))* 86400,安康;TO_NUMBER (SUBSTR (TZ_OFFSET (sessiontimezone), 1, 3)) * 3600);   最终获得oracle_to_unix;/猆nix时间戳转换为甲骨文时间   replace  create ,或是;function  bill_query.unix_to_oracle (in_number 编号),return  date    开始   ,,,,   ,,,返回(TO_DATE(& # 39; 19700101 & # 39; & # 39;名称# 39;),+,in_number/86400, + TO_NUMBER (SUBSTR (TZ_OFFSET (sessiontimezone), 1, 3))/24);   最终获得unix_to_oracle;/

Mysql迁移到Oracle简析