4.3.5. 其他

4.3.5.1. GaussDB-Oracle

4.3.5.1.1. 权限加载生效

语法

FLUSH PRIVILEGES

警告

受配置参数控制,config/unisql.conf中unisql.replace.sql参数可配置需要替换的sql语句。

示例

-- 转换前MySQL SQL:
FLUSH PRIVILEGES;

-- 转换后GaussDB-Oracle SQL(unisql.replace.sql = 'select 1'):
SELECT 1;

4.3.5.1.2. 双竖线运算符

语法

双竖线(||)表示逻辑或运算

示例

-- 转换前MySQL SQL:
select 1 || -1;

INSERT INTO `tb_user_api_key` SELECT MD5(id) instance_id,id user_id,login_name user_name,
CASE WHEN (ISNULL(auth_password) = 1 ) || (LENGTH( trim(auth_password)) = 0 ) THEN MD5(id)
ELSE auth_password END api_key,TRUE STATUS;

-- 转换后GaussDB-Oracle SQL:
SELECT 1 OR -1;

INSERT INTO tb_user_api_key SELECT MD5(id) AS instance_id,id AS user_id,login_name AS user_name,
CASE WHEN (unisql.ISNULL(auth_password)=1) OR (LENGTH(trim(auth_password))=0) THEN MD5(id)
ELSE auth_password END AS api_key,TRUE AS STATUS;

警告

双竖线(||)表示逻辑或运算,表达式两侧需要使用括号包裹

4.3.5.1.3. 条件注释

语法

支持mysql/*!版本号 xxx*/ 条件注释语法,该情况仅语法实现,无实际功能;
仅支持/**/注释为独立一行存在,不包括嵌在其他sql语句中情况。

示例

-- 转换前MySQL SQL:
/*!40101 SET NAMES utf8 */
create table t1(id int primary key, name varchar(20), age text);

/*!40101 SET SQL_MODE=''*/alter table t1 add column sex varchar(10);

-- 转换后GaussDB-Oracle SQL:
CREATE TABLE t1 (id int PRIMARY KEY,name nvarchar2(20),age text);

ALTER TABLE t1 ADD sex nvarchar2(10);

4.3.5.1.4. 反单引号

语法

警告

支持mysql反单引号语法,默认将反单引号剔除。可通过配置文件参数(unisql.keyword.doublequotes)进行配置, 对象名如果匹配到了此配置参数中配置的关键字则使用双引号包裹,每个关键字之间用逗号分隔, 例如:unisql.keyword.doublequotes = name, age 表示name和age使用双引号包裹。

示例

-- 转换前MySQL SQL:
selecttb.`name`,tb.`instance_id`,e.`dest_instance_id`,e.`source_instance_id`
from tb_ci_concrete_collection e left join tb_ci_base_object tb on tb.instance_id = e.instance_id;

-- 转换后GaussDB-Oracle SQL:
SELECT tb.NAME,tb.instance_id,e.dest_instance_id,e.source_instance_id
FROM tb_ci_concrete_collection AS e LEFT JOIN tb_ci_base_object AS tb ON tb.instance_id=e.instance_id;

-- 配置unisql.keyword.doublequotes=name,转换后GaussDB-Oracle SQL:
SELECT tb."NAME",tb.instance_id,e.dest_instance_id,e.source_instance_id
FROM tb_ci_concrete_collection AS e LEFT JOIN tb_ci_base_object AS tb ON tb.instance_id=e.instance_id;

4.3.5.1.5. 转义字符 \

语法

警告

将参数unisql.mysql.backslash.escapes设置为1,将支持mysql 反斜杠 \ 转义字符,当前仅支持对于单引号和反斜杠的转义组合,即 \'\\ 情况。

示例

create table t1(id int primary key, configurl text);

-- 转换前MySQL SQL:
insert into t1 values(1, '\content\'jres\' 1.0 encoding \\\UTF8');
insert into t1 values(2, '{\\\"nodelocator-server\\\" nodeNo=\\\"0 \\\ />\\r\\n\\r\\n\\t<plugins>\\"jres.logFactory \\\" load-level=\acm>}');


-- 转换后GaussDB-Oracle SQL:
INSERT INTO t1 VALUES (1,'content''jres'' 1.0 encoding \UTF8');
INSERT INTO t1 VALUES (2,'{\"nodelocator-server\" nodeNo=\"0 \ />\r\n\r\n\t<plugins>\"jres.logFactory \" load-level=acm>}');