意外发现openGauss兼容Oracle的几个条件表达式

2024年 5月 25日 25.9k 0

意外发现openGauss兼容Oracle的几个条件表达式

最近工作中发现openGauss在兼容oracle模式下,可以兼容常用的两个表达式,因此就随手测试了一下。

查看数据库版本

[omm@openGauss ~]$ gsql -r
gsql ((openGauss 6.0.0-RC1 build ed7f8e37) compiled at 2024-03-31 11:59:31 commit 0 last mr )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.

openGauss=# select version();
version
-----------------------------------------------------------------------------------------------------------------------------------------------------------
(openGauss 6.0.0-RC1 build ed7f8e37) compiled at 2024-03-31 11:59:31 commit 0 last mr on x86_64-unknown-linux-gnu, compiled by g++ (GCC) 10.3.0, 64-bit
(1 row)

查看openGauss数据库的兼容模式

testdb=# select datname,datcompatibility from pg_database;
datname | datcompatibility
-----------+------------------
template1 | A
template0 | A
testdb | A
postgres | A
(4 rows)

decode(expr1, expr2, result1 ,…)

将表达式base_expr与后面的每个compare(n) 进行比较,如果匹配返回相应的value(n)。如果没有发生匹配,则返回default。
意外发现openGauss兼容Oracle的几个条件表达式-1

testdb=# select id,name,address,decode(address,'北京市','BJ','南京市','NJ','ZG') JC from t1;
id | name | address | jc
----+------+---------+----
2 | zs2 | 北京市 | BJ
4 | zs4 | | ZG
1 | zs1 | 南京市 | NJ
(3 rows)

nvl(expr1, expr2)

如果value1为NULL则返回value2,如果value1非NULL,则返回value1。
意外发现openGauss兼容Oracle的几个条件表达式-2

testdb=# select * from t1;
id | name | address
----+------+---------
2 | zs2 | 北京市
4 | zs4 |
(2 rows)
testdb=# select id,name,nvl(address,'上海') from t1;
id | name | nvl
----+------+--------
2 | zs2 | 北京市
4 | zs4 | 上海
(2 rows)

另外在查看官网文档的过程中,发现在oracle中开发经常使用的nvl、nvl2、decode条件表达式也支持,但是使用需要使用whale插件后才可以使用;另外经过实测发现,nvl、decode在当前openGauss 6.0.0也可以使用,但是nvl2不支持。后来想安装whale插件测试,但是也没有对应版本插件下载的地方,只能下载源码自行编译,这块感觉还是有点不方便。

相关文章

pt-kill工具的使用
pt-ioprofile工具包的使用
数据库管理-第216期 Oracle的高可用-01(20240703)
DBMS_REPAIR EXAMPLE SCRIPT WITH PARTITION
数据库事务的四大特性: ACID 
使用BBED修复损坏的SYSTEM文件头

发布评论