oracle改造mysql主要改造点

insert into DCLLJOBINFO (JOBID, JOBNAME, FIRSTRUN, LASTRUNBEGIN, LASTRUNEND, RUNCOUNT) values ('4', 'group-FileIsDealRmonColl_1.FileIsDealRmonColl_1-job-4', to_DATE ('21-07-2011 14:09:20', 'dd-mm-yyyy hh24:mi:ss'), to_DATE ('09-01-2012 16:06:09', 'dd-mm-yyyy hh24:mi:ss '), to_DATE ('09-01-2012 16:06:11', 'dd-mm-yyyy hh24:mi:ss'), 12112);
yyyy-mm-dd
mysql
str_to_date ('2008-4-2 15:3:28',' %Y-%m-%d %H:%i:%s ');

insert into DCLLJOBINFO (JOBID, JOBNAME, FIRSTRUN, LASTRUNBEGIN, LASTRUNEND, RUNCOUNT) values ('4', 'group-FileIsDealRmonColl_1.FileIsDealRmonColl_1-job-4', str_to_date ('21-07-2011 14:09:20', '%d-%m-%Y %H:%i:%s'), str_to_date ('09-01-2012 16:06:09', '%d-%m-%Y %H:%i:%s'), str_to_date ('09-01-2012 16:06:11', '%d-%m-%Y %H:%i:%s'), 12670);
%Y-%m-%d %H:%i:%s

to_CHAR (generant_time, '%m/%d')       DATE_FORMAT(generant_time, '%m/%d')
to_CHAR ( ENABLE )   enable 为int型       concat(ENABLE,'')




建视图时的子查询问题
select * from aa as a,(select id from bb) as b where a.id=b.id

mysql
将子查询先建成一个视图,然后再建立视图进行关联
CREATE  VIEW  View_bb  as select id from bb;
select a.* from aa a inner join  View_bb   b on a.id=b.id

http://blog.csdn.net/lele2426/article/details/7519559

截取字符串
SUBSTR (unit_id, 0 , 5 )         改为   SUBSTRING (unit_id, 1, 5)
generant_time > SYSDATE - 8    改为  WHERE generant_time > now() - interval 8 day

注释:日期直接加减的含义不同了,比如Oracle中sysdate + 1 变成了sysdate() + interval 1 day(注意如果写成sysdate() + 1 语法还是正确的,但含义是错误的)

数据类型的替换
date----datetime     number----int          varchar2-------varchar


mysql中如何标记主外表( 
http://hi.baidu.com/thinkinginlamp/blog/item/ac488618104447be4aedbcfe.html  )


oracle中的 nvl() 方法 在mysql中用 IFNULL() 替换
如果你某个字段为空,但是你想让这个字段显示0
nvl(字段名,0),就是当你选出来的时候,这个字段虽然为空,但是显示的是0,当然这个0也可以换成其他东西,如:1,2,3……


oracle中的 decode() 函数 在mysql中用case ...when....then....when...then...end
select decode(sign(salary - 8000),1,salary*1.15,-1,salary*1.2,salary*1.15) from employee 是不是很简洁? DECODE的语法:DECODE(value,if1,then1,if2,then2,if3,then3,...,else),表示如果value等于if1时,DECODE函数的结果返回then1,...,如果不等于任何一个if值,则返回else

SELECT DECODE (SUBSTRING(TB1.UNIT_ID,0,5),'10-10','主机','10-11','数据库','10-12','中间件','10-13','网络设备') NAME

SELECT ( case SUBSTR(TB1.UNIT_ID, 1, 5) when '10-10' then '主机' when '10-11' then '数据库' when '10-12' then '中间件' when '10-13' then '网络设备' end ) NAME

orcale中的主外表,在mysql中如何标记
SELECT DECODE(SUBSTRING(TB1.UNIT_ID,0,5),'10-10','主机','10-11','数据库','10-12','中间件','10-13','网络设备') NAME,"
               + " TB1.UNIT_ID, TB1.STEPSUM, IFNULL(TB2.STEP1,0) STEP1 ,IFNULL(TB3.STEP1,0) STEP2,IFNULL(TB4.STEP1,0) STEP3, (TB1.STEPSUM-(IFNULL(TB2.STEP1,0))-(IFNULL(TB3.STEP1,0))-(IFNULL(TB4.STEP1,0))) step4 "
               + " FROM (SELECT substring(KBP_CLASS,0,5) UNIT_ID, COUNT (*) STEPSUM FROM V_ASSET_ALL WHERE KBP_CLASS LIKE '10-%' GROUP BY substring(KBP_CLASS,0,5)) TB1, "
                + " ("
               + getPTEventClass("1")
               + ") TB2,("
               + getPTEventClass("2")
               + ") TB3, ("
               + getPTEventClass("3")
               + ") TB4 "                 + " WHERE TB1.UNIT_ID = TB2.UNIT_ID( + ) AND TB1.UNIT_ID = TB3.UNIT_ID( + ) AND TB1.UNIT_ID = TB4.UNIT_ID (+ ) ORDER BY UNIT_ID


改为
SELECT (case SUBSTR(TB1.UNIT_ID, 1, 5) when '10-10' then '主机' when '10-11' then '数据库' when '10-12' then '中间件' when '10-13' then '网络设备' end) NAME,"
               + " TB1.UNIT_ID, TB1.STEPSUM, IFNULL(TB2.STEP1,0) STEP1 ,IFNULL(TB3.STEP1,0) STEP2,IFNULL(TB4.STEP1,0) STEP3, (TB1.STEPSUM-(IFNULL(TB2.STEP1,0))-(IFNULL(TB3.STEP1,0))-(IFNULL(TB4.STEP1,0))) step4 "
               + " FROM (SELECT SUBSTR(KBP_CLASS,1,5) UNIT_ID, COUNT(*) STEPSUM FROM V_ASSET_ALL WHERE KBP_CLASS LIKE '10-%' GROUP BY SUBSTR(KBP_CLASS,1,5)) TB1 "
               + " left outer join ("
               + getPTEventClass("1")
               + ") TB2 on TB1.UNIT_ID = TB2.UNIT_ID left outer join ("
               + getPTEventClass("2")
               + ") TB3 on TB1.UNIT_ID = TB3.UNIT_ID left outer join ("
               + getPTEventClass("3")
               + ") TB4 on TB1.UNIT_ID = TB4.UNIT_ID "                 + " ORDER BY UNIT_ID 

oracle中的 replace() 函数    replace('将要更改的字符串','被替换掉的字符串','替换字符串')

oracle中的 | | 是连接符 

如 TB2.UNIT_ID LIKE  REPLACE (TB1.UNIT_ID, ':', '%') || '%'       将 REPLACE (TB1.UNIT_ID, ':', '%')与%连接起来

mysqle中代替oracle中的连接符 TB2.UNIT_ID LIKE   concat (REPLACE (TB1.UNIT_ID, ':', '%') ,'%')

注意:oracle函数与()之间可以有空格,mysql不能有

oracle中的 rownum     rownum是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2, 依此类推,这个伪字段可以用于限制查询返回的总行数

在mysql中没有伪字段
当mysql中需要查询伪字段时 (如序号)
mysql> SELECT * FROM frutas;
+-----------+----------+
| nombre | color |
+-----------+----------+
| fresa | rojo |
| platano | amarillo |
| manzana | verde |
| uva | verde |
| pera | verde |
| mandarina | naranja |
| melocoton | marron |
| limon | amarillo |
+-----------+----------+
8 rows in set (0,00 sec)


SELECT @rownum:=@rownum+1 AS rownum , frutas.*
FROM (SELECT @rownum:=0) r , frutas;

mysql> SELECT @rownum:=@rownum+1 AS rownum, frutas.*
-> FROM (SELECT @rownum:=0) r, frutas;
+--------+-----------+----------+
| rownum | nombre | color |
+--------+-----------+----------+
| 1 | fresa | rojo |
| 2 | platano | amarillo |
| 3 | manzana | verde |
| 4 | uva | verde |
| 5 | pera | verde |
| 6 | mandarina | naranja |
| 7 | melocoton | marron |
| 8 | limon | amarillo |
+--------+-----------+----------+
8 rows in set (0,00 sec)


但是如何把这个查询放在 create view 里面
mysql> CREATE VIEW vw_frutas AS SELECT @rownum:=@rownum+1 AS rownum, frutas.*
-> FROM (SELECT @rownum:=0) r, frutas;
ERROR 1351 (HY000): View's SELECT contains a variable or parameter




oracle中的 TO_NUMBER() 函数   将char型改为number型
mysql中用cast()代替
如:TO_NUMBER(PARENT_ID)
        cast(PARENT_ID as SIGNED INTEGER)

oracle中的  String(number, character)      number 必要参数;Long。返回的字符串长度。如果 number 包含 Null,将返回 Null。
character 必要参数;Variant。为指定字符的字符码或字符串表达式,其第一个字符将用于建立返回的字符串。如果 character 包含 Null,就会返回 Null

oracle中的 分页   mySql = this.getLimitString(mySqlCount, this.pagination);
mysql中的分页   mySql = mySqlCount + " limit " +pagination.getFirstRownum()+","+pagination.getPageSize();


Oracle中 start with...connect by prior 子句用法 connect by 是结构化查询中用到的,其基本语法是:
select ... from tablename start with 条件1
connect by 条件2
where 条件3;
例:
select * from table
start with org_id = 'HBHqfWGWPy'
connect by prior org_id = parent_id;
简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:
org_id,parent_id那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。
条件1 是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。
条件2 是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR org_id = parent_id就是说上一条记录的org_id 是本条记录的parent_id,即本记录的父亲是上一条记录。
条件3 是过滤条件,用于对返回的所有记录进行过滤。

mysql 实现oracle start with connect by递归   
http://blog.sina.com.cn/s/blog_8317516b0100v4nf.html
mysql中的find_in_set:
方法1---SELECT * FROM jiu WHERE `jiu` like 1%; (用like的方法实现)
方法2---SELECT * FROM jiu WHERE FIND_IN_SET('1','jiu');

oracle中取前几行数据  rownum <=10
mysql中用LIMIT 0,10(10是返回最大行数)

KBP_CLASS(unit_id.split( ":" )[0])  unit_id用:分割取第一列为 KBP_CLASS


mysql中的delet不支持别名


mysql中的delete语句不支持起别名
mysql中的 delete from 表名 where 。。。  中的from不能省去,oracle中可以省去
mysql中的Insert语句不支持插入的项中先查询再插入  解决办法
http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece7631050843a4113dc3b6780c7150884cd15c6735b364065b2fd7a3510738298237a05a44356f7f53372350324a3de95c81cd2e4d9696cd630340147da0045935fb8cb376e9c67875a98fe4abbadf043d5b9d2a29e16049b08513197f0fa1c53549f38b6033192e0ca184b0807ba9c27658e4e7659d97357b737eee7467906f1b7961d5bc25ac7666580ae45f26055e004a56f5e7314b74dc11f565227e13f67b9046a5385eb2cf02a085722c61ceef9d6b69a0fce8ab977&p=9e759a46d0c417fc57e6d23a135989&user=baidu&fm=sc&query=mysql+INSERT+You+can%27t+specify+target+table+%27TB%5FSYS%5FPLUGWEB%5FRTREE%27+for+update+in+FROM+cla&qid=8b70fbba4801eaf3&p1=6




ORACLE中   SELECT MAX ( ID )+ 1 AS ID FROM SJDBCMANAGER    若相同方式写入mysql,mysql会是小数,oracle会是整数
如想mysql与oracle一样   改为SELECT round (MAX(ID)+1) AS ID FROM SJDBCMANAGER
或者 SELECT cast (MAX(ID) as unsigned int )+1 as ID FROM SJDBCMANAGER

oracle中 minus  两个关联表的符合条件记录的交集,是于union作用相反.

你可能感兴趣的:(oracle,mysql)