旬陽做網(wǎng)站seo計(jì)費(fèi)系統(tǒng)源碼
意外發(fā)現(xiàn)openGauss兼容Oracle的幾個(gè)條件表達(dá)式
最近工作中發(fā)現(xiàn)openGauss在兼容oracle模式下,可以兼容常用的兩個(gè)表達(dá)式,因此就隨手測試了一下。
查看數(shù)據(jù)庫版本
[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數(shù)據(jù)庫的兼容模式
testdb=# select datname,datcompatibility from pg_database;datname | datcompatibility
-----------+------------------template1 | Atemplate0 | Atestdb | Apostgres | A
(4 rows)
decode(expr1, expr2, result1 ,…)
將表達(dá)式base_expr與后面的每個(gè)compare(n) 進(jìn)行比較,如果匹配返回相應(yīng)的value(n)。如果沒有發(fā)生匹配,則返回default。
testdb=# select id,name,address,decode(address,'北京市','BJ','南京市','NJ','ZG') JC from t1;id | name | address | jc
----+------+---------+----2 | zs2 | 北京市 | BJ4 | zs4 | | ZG1 | zs1 | 南京市 | NJ
(3 rows)
nvl(expr1, expr2)
如果value1為NULL則返回value2,如果value1非NULL,則返回value1。
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)
decode和nvl的使用方法與在Oracle中的使用方式一致,并無差別,這里不做詳細(xì)介紹。在查看文檔過程,官網(wǎng)文檔函數(shù)和操作符章節(jié)與whale插件支持的函數(shù)相關(guān)章節(jié)兩個(gè)地方都描述了對(duì)nvl、decode的支持情況,但是也未發(fā)現(xiàn)兩處的區(qū)別在哪兒?不清楚當(dāng)使用插件和不使用的情況的功能區(qū)別在哪兒呢?另外也發(fā)現(xiàn)在oracle中開發(fā)經(jīng)常使用的nvl2條件表達(dá)式也支持,但是使用需要使用whale插件后才可以使用;后來想安裝whale插件測試,但是也沒有對(duì)應(yīng)版本插件下載的地方,只能下載源碼自行編譯,對(duì)于這塊感覺還是有點(diǎn)不方便。由于時(shí)間的問題也沒有進(jìn)一步編譯插件源碼進(jìn)行測試。