mariadb兼容oracle,体验MariaDB 10.3中的Oracle语法支持

MariaDB 10.3发布已经有一段时间了,最近刚刚RC。里面提到了SQL_MODE新增了ORACLE选项,可以支持部分的PL/SQL语法,算是一个比较“新鲜”的更新,所以打算安装体验一下。

体验一下SQL_MODE="ORACLE"

Oracle中的示例文档中代码:

-- available online in file 'sample1'

DECLARE

x NUMBER := 100;

BEGIN

FOR i IN 1..10 LOOP

IF MOD(i,2) = 0 THEN -- i is even

INSERT INTO temp VALUES (i, x, 'i is even');

ELSE

INSERT INTO temp VALUES (i, x, 'i is odd');

END IF;

x := x + 100;

END LOOP;

COMMIT;

END;

首先,我们看看如果是这样一段代码,要在MySQL中运行,应该看起来是怎样的。下面是我修改的在MySQL5.7中运行的代码:

CREATE PROCEDURE dowhile()

BEGIN

DECLARE x INT DEFAULT 100;

DECLARE i INT DEFAULT 1;

WHILE i <= 10 DO

IF MOD(i,2) = 0 THEN -- i is even

INSERT INTO temp VALUES (i, x, 'i is even');

ELSE

INSERT INTO temp VALUES (i, x, 'i is odd');

END IF;

COMMIT;

SET x=x+100;

SET i=i+1;

END WHILE;

END;

以上两种,主要的不同包括:

MySQL代码必须在一个存储过程中执行,所以这里创建了dowhile

DECLARE语法不一样,Oracle DECLARE在BEGIN之前,MySQL则在BEGIN里面

MySQL不支持FOR... IN... LOOP的语法,这里改用WHILE来实现;MySQL也不支持"1..10"这种写法

数据类型不同,Oracle中是NUMBER,MySQL是INT

变量赋值不同,Oracle使用了“:=”,MySQL是 “SET .. = ...”

我们先看看,前一段Oracle的代码,在MariaDB里面是否能够不做修改的运行:

这个简单的示例可以正常运行:

Snip20180312_7.png

升级MariaDB 10.1到10.3

因为之前安装10.1版本,所以这次需要升级到最新的10.3。系统是Centos 7.4使用的yum管理,下面是大致的升级步骤。

先把yum仓库切换成10.3的仓库:

/etc/yum.repos.d/MariaDB.repo

[mariadb]

name = MariaDB

baseurl = http://yum.mariadb.org/10.3/centos7-amd64

gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB

gpgcheck=1

删除yum缓存信息:

yum clean metadata

删除原来的安装的MariaDB软件

rpm -e MariaDB-server

rpm -e MariaDB-shared MariaDB-client MariaDB-common

安装新版本的MariaDB:

yum install mariadb-server

yum install MariaDB-shared

启动并登录MariaDB:

sudo systemctl start mariadb

systemctl status mariadb.service

Snip20180308_66.png

最后

目前还没有量化评估MariaDB对PL/SQL的支持情况,但是,应该算是向Oracle放了一个“冷枪”。当然,对Oracle来说,这早就不是第一个支持Oracle语法的数据库了,并没什么大不了的。个人感觉,对于MariaDB来说,最重要应该还是拿下当前官方MySQL所占的份额,这才是最大的挑战。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值