mysql视图 oracle视图_oracle视图迁移到mysql

本文记录了将Oracle视图迁移至MySQL过程中遇到的问题,包括函数转换(如NVL转IFNULL,DECODE转CASE WHEN)和日期处理方式的调整。还提到了MySQL在创建视图时的规则限制,如不允许SQL中有子查询,以及分组排序的实现差异。解决方案包括使用MySQL的内置函数和变量来替代Oracle的特定功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

oracle视图迁移mysql(仅记录当前项目遇到的小问题和解决方案)

涉及问题点:

1、函数差异

oracle                 mysql

判断空值:   nvl('字段',值)            ifnull('字段',值)

条件赋值:   decode()               case when then else end

日期格式化:  to_char('date','yyyy-MM-dd')         date_format('date','%Y%m%d')

日期计算:         时间+|- interval ‘10’ year|month|day|hour|minute|second           date_add(,)    date_sub(,)

...

2、规则限定

主要是mysql创建视图遇到的规则限制,

2.1、mysql创建视图不允许SQL中有子查询,oracle不存在此限制。

2.2、mysql分组排序实现和oracle差异

oracle分组排序,获取排序id:row_number() over(partition by a.policy_id order by a.transfer_date desc)

mysql方案:使用函数

CREATE FUNCTION `func_inc_var_session`(reset BIT) RETURNS int

NO SQL

NOT DETERMINISTIC

begin

IF reset THEN

SET @var := 0;

ELSE

SET @var := IFNULL(@var,0) + 1;

END IF;

return @var;

end

视图:SELECT func_inc_var_session(0) FROM (select语句集合结果)T JOIN (SELECT func_inc_var_session(1)) r

【转自--https://blog.csdn.net/ai_feng123/article/details/82256814】

2.2.1倘若不使用视图排序,可使用变量(变量需要使用实体表,mysql变量不支持虚拟表)

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

--附mysql创建视图的限制--http://blog.51yip.com/mysql/1065.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值