mysql与oracle差异性分析

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

下面的列表总共有64条不同数据类型编号ORACLEMYSQL注释1NUMBERint/DECIMALDECIMAL就是NUMBER(10,2)这样的结构INT就是是NUMBER(10),表示整型;MYSQL有很多类int型,tinyintmediumintbigint等,不同的int宽度不一样2Varchar2(n)varchar(n)3DateDATATIME日期字段的处理MYSQL日期字段分DATE和TIME两种,ORACLE日期字段只有DATE,包含年月日时分秒信息,用当前数据库的系统时间为SYSDATE,精确到秒,或者用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)年-月-日24小时:分钟:秒的格式YYYY-MM-DDHH24:MI:SSTO_DATE()还有很多种日期格式,可以参看ORACLEDOC.日期型字段转换成字符串函数TO_CHAR(‘2001-08-01’,’YYYY-MM-DDHH24:MI:SS’)日期字段的数学运算公式有很大的不同。MYSQL找到离当前时间7天用DATE_FIELD_NAME>SUBDATE(NOW(),INTERVAL7DAY)ORACLE找到离当前时间7天用DATE_FIELD_NAME>SYSDATE-7;MYSQL中插入当前时间的几个函数是:NOW()函数以`'YYYY-MM-DDHH:MM:SS'返回当前的日期时间,可以直接存到DATETIME字段中。CURDATE()以’YYYY-MM-DD’的格式返回今天的日期,可以直接存到DATE字段中。CURTIME()以’HH:MM:SS’的格式返回当前的时间,可以直接存到TIME字段中。例:insertintotablename(fieldname)values(now())而oracle中当前时间是sysdate4INTEGERint/INTEGERMysql中INTEGER等价于int5EXCEPTIONSQLEXCEPTION详见2009001-eService-O2MG.doc中2.5Mysql异常处理6CONSTANTVARCHAR2(1)mysql中没有CONSTANT关键字从ORACLE迁移到MYSQL,所有CONSTANT常量只能定义成变量7TYPEg_grp_curISREFCURSOR;光标:mysql中有替代方案详见2009001-eService-O2MG.doc中2.2光标处理8TYPEunpacklist_typeISTABLEOFVARCHAR2(2000)INDEXBYBINARY_INTEGER;数组:mysql中借助临时表处理或者直接写逻辑到相应的代码中,直接对集合中每个值进行相应的处理详见2009001-eService-O2MG.doc中2.4数组处理9自动增长的序列自动增长的数据类型MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。10NULLNULL空字符的处理MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQL的NOTNULL来定义ORACLE表结构,导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。基本语法编号类别ORACLEMYSQL注释1变量的声明方式不同li_indexNUMBER:=0DECLAREli_indexINTEGERDEFAULT01.mysql使用DECLARE定义局部变量.定义变量语法为:DECLAREvar_name[,...]type[DEFAULTvalue]要给变量提供一个默认值,需要包含一个DEFAULT子句。值可以被指定为一个表达式,不需要为一个常数。如果没有DEFAULT子句,初始值为NULL。2变量的赋值方式不同lv_inputstr:=iv_inputstrSETlv_inputstr=iv_inputstr1.oracle变量赋值使用:=mysql使用赋值使用set关键字.将一个值赋给一个变量时使用=.3跳出(退出)语句不同EXIT;LEAVEprocedurename;1.oracle:如果exit语句在循环中就退出当前循环.如果exit语句不再循环中,就退出当前过程或方法.Mysql:如果leave语句后面跟的是存储过程名,则退出当前存储过程.如果leave语句后面跟的是lable名.则退出当前lable.while条件loopexit;endloop;label_name:while条件doleavelabel_name;endwhilelabel_name;4定义游标TYPEg_grp_curISREFCURSOR;DECLAREcursor_nameCURSORFORSELECT_statement;oracle可以先定义游标,然后给游标赋值.mysql定义游标时就需要给游标赋值.Mysql定义游标出自Mysql5.1参考手册20.2.11.1.声明光标.5定义数组TYPEunpacklist_typeISTABLEOFVARCHAR2(2000)INDEXBYBINARY_INTEGER;可以使用临时表代替oracle数组,也可以循环拆分字符来替代oracle数组.目前可以使用临时表来代替oracle数组.详见2009002-OTMPPS-DifficultQuestions-0001.doc中2.4Mysql数组处理部分6注释方式不同--message或/**….*/或/*….*/--message或/*….*/或#mysql注释来自MySQL5.1参考手册9.5.注释语法,建议同oracle一样,单行用--,多行/**/7自带日期时间函数格式不同Oracle时间格式:yyyy-MM-ddhh:mi:ssMysql时间格式:%Y-%m-%d%H:%i:%s1.MYSQL日期字段分DATE和TIME两种.ORACLE日期字段只有DATE,包含年月日时分秒信息.2.mysql中取当前系统时间为now()函数,精确到秒.oracle中取当前数据库的系统时间为SYSDATE,精确到秒.8日期加减当前时间加N天:sysdate+N当前时间减N天:sysdate-N日期相加:date_add(now(),INTERVAL180DAY)日期相减:date_sub('1998-01-0100:00:00',interval'11:1:1'day_second)9字符串连接符不同result:=v_int1||v_int2;setresult=concat(v_int1,v_int2);1.oracle使用||连接字符串,也可以使用concat函数.但Oracle的concat函数只能连接两个字符串.Mysql使用concat方法连接字符串.MySQL的concat函数可以连接一个或者多个字符串,如mysqlselectconcat('10');结果为:10.mysqlselectconcat('11','22','33','aa');结果为:112233aa2.||在Mysql是与运算10定义游标不同CURSORl_bk_curISSELECTB.BK_HDR_INT_KEY,B.BK_NUMFROMES_SR_DTL_VRBA,ES_BK_HDRBWHEREA.BK_HDR_INT_KEY=B.BK_HDR_INT_KEYANDb.BK_STATUS!=ES_BK_PKG.g_status_canANDA.SR_HDR_INT_KEY=ii_sr_hdr_int_key;DECLAREl_bk_curCURSORFORSELECTB.BK_HDR_INT_KEY,B.BK_NUMFROMES_SR_DTL_VRBA,ES_BK_HDRBWHEREA.BK_HDR_INT_KEY=B.BK_HDR_INT_KEYANDb.BK_STATUS!=ES_BK_PKG.g_status_canANDA.SR_HDR_INT_KEY=ii_sr_hdr_int_key;详见2009002-OTMPPS-DifficultQuestions-0001.doc中2.2Mysql游标处理部分11事务回滚ROLLBACK;ROLLBACK;oracle和mysql中使用方法相同12GOTO语句GOTOcheck_date;GOTOcheck_date;oracle和mysql中使用方法相同函数编号类别ORACLEMYSQL注释1数字函数round(1.23456,4)round(1.23456,4)一样:ORACLE:selectround(1.23456,4)valuefromdualMYSQL:selectround(1.23456,4)value2abs(-1)abs(-1)功能:将当前数据取绝对值用法:oracle和mysql用法一样mysql:selectabs(-1)valueoracle:selectabs(-1)valuefromdual3ceil(-1.001))ceiling(-1.001)功能:返回不小于X的最小整数用法:mysqls:selectceiling(-1.001)valueoracle:selectceil(-1.001)valuefromdual4floor(-1.001)floor(-1.001)功能:返回不大于X的最大整数值用法:mysql:selectfloor(-1.001)valueoracle:selectfloor(-1.001)valuefromdual5Max(expr)/Min(expr)Max(expr)/Min(expr)功能:返回expr的最小或最大值。MIN()和MAX()可以接受一个字符串参数;在这种情况下,它们将返回最小或最大的字符串传下。用法:ROACLE:selectmax(user_int_key)fromsd_usr;MYSQL:selectmax(user_int_key)fromsd_usr;6字符串函数ascii(str)ascii(str)功能:返回字符串str最左边的那个字符的ASCII码值。如果str是一个空字符串,那么返回值为0。如果str是一个NULL,返回值也是NULL.用法:mysql:selectascii('a')valueoracle:selectascii('a')valuefromdual7CHAR(N,...)CHAR(N,...)功能:CHAR()以整数类型解释参数,返回这个整数所代表的ASCII码值给出的字符组成的字符串。NULL值将被忽略.用法:mysql:selectchar(97)valueoracle:selectchr(97)valuefromdual8REPLACE(str,from_str,to_str)REPLACE(str,from_str,to_str)功能:在字符串str中所有出现的字符串from_str均被to_str替换,然后返回这个字符串.用法:mysql:SELECTREPLACE('abcdef','bcd','ijklmn')valueoracle:SELECTReplace('abcdef','bcd','ijklmn')valuefromdual9INSTR('sdsq','s',2)INSTR('sdsq','s')参数个数不同ORACLE:selectINSTR('sdsq','s',2)valuefromdual(要求从位置2开始)MYSQL:selectINSTR('sdsq','s')value(从默认的位置1开始)10SUBSTR('abcd',2,2)substring('abcd',2,2)函数名称不同:ORACLE:selectsubstr('abc

1 / 22
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功