2.7.2.2. OceanBase-Oracle 目标库
本节描述 伪多发 OceanBase-Oracle 目标库的 SQL 兼容情况说明(按源库 MySQL 语法编写)。
目前兼容 OceanBase-Oracle 3.2.3 版本。
2.7.2.2.1. 通用兼容说明
以下范围以统一 SQL 的函数兼容能力为准,详细说明请参考 转换为 OceanBase-Oracle。 同时,多条 DML 语句存在通用约束,若语句中涉及相应功能,则视为不支持:
表达式中使用 DATE_ADD / DATE_SUB 函数。
含有 CLOB 或 BLOB 字段的表不支持比对(目标端 OceanBase-Oracle 不支持此类表参与 UNION 操作)。
2.7.2.2.2. INSERT 语句
语法结构
INSERT [IGNORE]
[INTO] tbl_name
[(col_name [, col_name] ...)]
{ {VALUES | VALUE} (value_list) [, (value_list)] ... }
[ON DUPLICATE KEY UPDATE assignment_list]
INSERT [IGNORE]
[INTO] tbl_name
[(col_name [, col_name] ...)]
{ SELECT ... }
[ON DUPLICATE KEY UPDATE assignment_list]
INSERT
[INTO] tbl_name
[(col_name [, col_name] ...)]
with [RECURSIVE]
{new_tbl_name AS ({ SELECT ... }) [, new_tbl_name AS ({ SELECT ... })]}
{ SELECT ... }
value_list:
value [, value] ...
assignment:
col_name = values(col_name)
assignment_list:
assignment [, assignment] ...
支持范围
支持 INSERT [INTO] ... VALUES 单行与多行插入,支持 VALUE 单数形式。
支持省略列列表或仅指定部分列。
支持 INSERT ... SELECT 从查询结果插入。
支持 VALUES 中使用表达式、DEFAULT、NULL、函数与标量子查询。
支持 INSERT IGNORE 忽略重复键冲突。
支持 ON DUPLICATE KEY UPDATE 的简单写法(单列更新、VALUES(col) 形式、子查询赋值)。
支持指定单个分区的插入。
不支持的语法特性
LOW_PRIORITY 与 HIGH_PRIORITY 修饰。
INSERT SET 语法。
INSERT ... RETURNING 子句(含列、表达式、函数、别名)。
指定多个分区的插入。
ON DUPLICATE KEY UPDATE 的复杂写法(多列更新、表达式/函数中别名冲突等)。
INSERT IGNORE 用于忽略数据截断或非法值。
含有 CLOB 或 BLOB 字段的表执行 INSERT / INSERT IGNORE 在比对场景不支持(目标端无法使用 UNION 结合大字段)。
2.7.2.2.3. REPLACE 语句
语法结构
REPLACE [INTO] tbl_name
[(col_name [, col_name] ...)]
{ {VALUES | VALUE} (value_list) [, (value_list)] ...}
REPLACE
[INTO] tbl_name
[(col_name [, col_name] ...)]
{SELECT ...}
value:
{expr | DEFAULT}
value_list:
value [, value] ...
assignment:
col_name = value
assignment_list:
assignment [, assignment] ...
支持范围
支持 REPLACE 与 REPLACE LOW_PRIORITY 的常规写法。
支持 REPLACE ... VALUES 与 REPLACE ... SELECT。
支持在 SELECT 中使用常见日期时间与字符串函数(如 STR_TO_DATE、UNIX_TIMESTAMP、FROM_UNIXTIME、DAY、YEAR、WEEKOFYEAR、DAYOFWEEK)。
支持在 SELECT 中使用二进制/大字段相关函数(如 BLOB、TINYBLOB)。
不支持的语法特性
目标端不支持 schema.table 形式的对象引用。
REPLACE ... SELECT 搭配 WITH CTE 的写法。
REPLACE ... SELECT 中使用 LAST_INSERT_ID()。
schema 下对象的 REPLACE 语句。
2.7.2.2.4. UPDATE 语句
语法结构
单表更新:
UPDATE [IGNORE] tbl_name
SET assignment_list
[WHERE where_condition]
[ORDER BY {col_name | expr | position}
[ASC | DESC], ...]
[LIMIT row_count]
多表更新:
UPDATE [IGNORE] table_references
SET assignment_list
[WHERE where_condition]
支持范围
支持 UPDATE LOW_PRIORITY、UPDATE IGNORE 与组合写法。
支持单表与多表更新,支持表别名。
支持多列赋值与以下赋值形式:常量、DEFAULT、NULL、同表列、算术/字符串表达式、函数、CASE、标量子查询、自增/自减。
支持常见 WHERE 条件:比较运算、IN/NOT IN、BETWEEN/NOT BETWEEN、LIKE、LIKE ... ESCAPE、IS NULL/IS NOT NULL、EXISTS/NOT EXISTS、ALL/ANY/SOME 子查询、逻辑组合(AND/OR/XOR/NOT)、括号分组。
支持 ORDER BY 与 LIMIT。
支持 JOIN、派生表与括号表引用的多表更新。
不支持的语法特性
指定分区的更新(单分区或多分区)。
REGEXP 与 NOT REGEXP 条件。
UPDATE IGNORE 用于忽略数据转换错误或截断。
SET 或 WHERE 子查询直接引用被更新表的写法。
2.7.2.2.5. DELETE 语句
语法结构
单表删除:
DELETE [IGNORE]
FROM tbl_name [[AS] table_alias]
[WHERE where_condition]
[ORDER BY {col_name | expr} [ASC | DESC], ...]
[LIMIT row_count]
多表删除:
DELETE tbl_name[.*] [, tbl_name[.*]] ...
FROM table_references
[WHERE where_condition]
支持范围
支持 DELETE 与 DELETE IGNORE。
支持 ORDER BY ... LIMIT。
支持指定单个分区删除。
支持多表删除(DELETE t1, t2 FROM ...)以及仅删除其中一张表的写法。
支持常见 WHERE 条件:比较运算、IN/NOT IN、BETWEEN/NOT BETWEEN、LIKE、IS NULL/IS NOT NULL、EXISTS/NOT EXISTS、ALL/ANY 子查询、逻辑组合(AND/OR/NOT)、括号分组。
不支持的语法特性
LOW_PRIORITY 与 QUICK 修饰。
指定多个分区的删除。
REGEXP 与 NOT REGEXP 条件。
XOR 逻辑运算。
RETURNING 子句(含列、表达式、函数、别名)。
多表删除中的 USING 语法。
HISTORY 相关删除与系统版本表(history 表)相关语句。