Oracle 转 MySQL 语法变化 (一般情况)

Oracle 转 MySQL 语法变化

(一般情况)

1. Oracle : start with …connect by

Mysql 不支持,可以利用函数解决

例如:

<if test="_databaseId == 'oracle'"> 
	start with T1.stu_id=#{ stu_id } connect by prior T1. stu_id = stu_id
</if>
<if test="_databaseId == 'mysql'"> 
AND T1. stu_id in( 
             select teacher_id from t_system_orgs where FIND_IN_SET(stu_id, get_org_pid(#{teacher_id }))
             )
</if>

其中get_teacher_id需要在mysql中,自己写一个函数
函数内容如下:

CREATE FUNCTION `get_teacher_id`(`rootId` char(100)) RETURNS varchar(1000) CHARSET utf8
BEGIN
       DECLARE pTemp VARCHAR(1000);  
       DECLARE cTemp VARCHAR(1000);  
      
       SET pTemp = '$';  
       SET cTemp =cast(rootId as CHAR);
      
       WHILE cTemp is not null DO  
         SET pTemp = concat(pTemp,',',cTemp);
         SELECT group_concat(teacher_id) INTO cTemp FROM t_stu_teacher   
         WHERE FIND_IN_SET(stu_id,cTemp)>0;
       END WHILE;  
       RETURN pTemp;  
END

注意:在函数中,需要把,要生成树形结构的字段以及表名放到函数中

2. Oracle :nvl的转换

Nvl 在MySQL中用ifnull代替

3. Oracle :nvl2的转换

oracle: NVL2(exp1,exp2,exp3) 

如果 exp1 不为空 ,函数返回 exp2 的值;
如果 exp2 为空 ,函数返回 exp3 的值;

mysql : IF ( ISNULL(字段名) , 0 , 1 )

如果字段名是null,函数返回0,不是null,函数返回1

4. 时间日期转换

Oracle:To_date(‘日期’,)------(也可以用to_char)
YYYY-MM-DD HH24:MI:SS
MySql:date_formate(‘日期’,)
%Y-%m-%d-%T

5. oracle的序列

oracle序列:
seq_orgid.nextval

mysql: oracle 的sequence改写,需要建函数,建表

函数:

CREATE DEFINER = `root`@`localhost` FUNCTION `NewProc`(seq_name varchar(50))
 RETURNS int(11)
begin
 update control_sequence
 set current_value = current_value + increment_value
 where name = seq_name;
 return func_currval(seq_name);
end;

表:

CREATE TABLE `control_sequence` (
  `name` varchar(50) NOT NULL COMMENT '序列的名字,唯一',
  `current_value` bigint(100) NOT NULL COMMENT '当前的值',
  `increment_value` int(11) NOT NULL DEFAULT '1' COMMENT '步长,默认为1',
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='公共的序列表,用于为非自增且要求唯一的字段记录和获取唯一ID。';

用法:(func_nextval(‘seq_orgid’)

6. oracle的to_char

Mysql需要根据数据的格式进行转换

Cast(字段 as 类型)
CONVERT(字段 as 类型)

7. Oracle 自带的rowId,rowNum

Mysql需要自己手动添加

Oracle:
Select t.* , rownum rn FROM  t_tables_gather t where 1=1
Mysql:
SELECT t.*, (@rownum:=@rownum+1 ) rn FROM (SELECT @rownum:=0)a, t_tables_gather t where 1=1

注意:mysql 无法像oracle一样生成字母的rowId,所以代替rowid也是数字递增。

8. null的使用

Oracle中的sql可以直接插入null,或者‘ ’,
Mysql 不支持,mysql 只能插入null

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值