操作符
GaussDB数据库兼容除分层查询以外的运算符。
SQL运算符
| Oracle数据库 | GaussDB数据库 |
|---|---|
| 一元运算符和二元运算符 | 支持 |
| 运算符优先级 | 支持 |
算术运算符
| Oracle数据库 | GaussDB数据库 |
|---|---|
| 正负(+-)一元运算符 | 支持 |
| 加减(+-)二元运算符 | 支持 |
| 乘除(*/)二元运算符 | 支持 |
COLLATE运算符
| Oracle数据库 | GaussDB数据库 |
|---|---|
| COLLATE collation_name | 支持 |
连接运算符
| Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|
| || | 支持,有差异。 | 对于非法字符的拼接,GaussDB不会检查字符的合法性,直接拼接所有字符;而Oracle若检测到非法字符,会忽略该字符。 示例: -- GaussDB
gaussdb=# SET a_format_version='10c';
SET
gaussdb=# SET a_format_dev_version='s2';
SET
gaussdb=# SELECT dump(CHR(239) || 'test') FROM dual;
dump
-----------------------------------
Typ=25 Len=5: 239,116,101,115,116
(1 row)
-- Oracle
SQL> SELECT dump(CHR(239) || 'test') FROM dual;
dump(CHR(239)||'TEST')
-----------------------------------------------
Typ=1 Len=4: 116,101,115,116 |
分层查询运算符
| Oracle数据库 | GaussDB数据库 | 差异 |
|---|---|---|
| prior | 支持,有差异。 | GaussDB中仅支持对普通列调用,不支持对函数等调用。 |
| connect_by_root | 支持,有差异。 | GaussDB中,connect_by_root调用时,用括号修饰操作值时,行为与Oracle一致;不使用括号时,仅支持对普通列调用此运算符。 |
集合运算符
| Oracle数据库 | GaussDB数据库 |
|---|---|
| union | 支持 |
| union all | 支持 |
| intersect | 支持 |
| minus | 支持 |
多集合运算符
| Oracle数据库 | GaussDB数据库 |
|---|---|
| multiset except | 支持 |
| multiset intersect | 支持 |
| multiset union | 支持 |
用户自定义运算符
| Oracle数据库 | GaussDB数据库 |
|---|---|
| CREATE OPERATOR | 不支持 |
比较操作符
| Oracle数据库 | GaussDB数据库 |
|---|---|
| < = | 支持 |
| < > | 支持 |
| > = | 支持 |
| ^ = | 支持 |
| ! = | 不支持,!=中间存在空格时,!会被识别为阶乘。 |
当比较操作符(<=、<>、>=、^=)中间存在空格时,也可以识别成没有空格进行正常操作。!=中间存在空格时,!会被识别为阶乘,可能会导致结果与预期不一致。