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')
...
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