GBase 8s
其他
文章

南大通用GBase 8s 兼容模式切换简介

发表于2026-07-08 17:42:26170次浏览0个评论

GBase 8s数据库通过灵活配置SQLMODE,开发者可以在同一数据库平台上使用熟悉的语法进行开发。本文将介绍如何在dbaccess命令行工具和JDBC连接中切换兼容模式。


兼容模式切换

GBase 8s 支持对Mysql、Oracle数据库的兼容。兼容 ORACLE 语法须配置 SQLMODE 为 ORACLE 模式,兼容MYSQL语法则须配置SQLMODE为MYSQL模式。

dbaccess

在dbaccess中使用 set environment sqlmode 'mysql';切换为Mysql模式,使用set environment sqlmode 'oracle';切换为Oracle模式,默认为 GBASE 模式。

例:dbaccess中使用mysql语法

> set environment sqlmode 'mysql';
Environment set.
> CREATE TABLE order_info (
>   order_id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '订单ID',
 user_id BIGINT NOT NULL COMMENT '用户ID',
 order_amount DECIMAL(10,2) NOT NULL COMMENT '订单金额',
 order_status TINYINT DEFAULT 0 COMMENT '订单状态:0待支付 1已完成 2> 已取消',
 create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '下单时间'>
) COMMENT '订单主表';
Table created.
> SELECT order_id,
      IF(order_status = 1, '已完成', '未完成') AS status_desc
FROM order_info;> >

           order_id status_desc

No rows found.
> SHOW TABLES LIKE 'order_info';

tables_in_db2  order_info
1 row(s) retrieved.
> DELIMITER //
CREATE PROCEDURE simple_repeat_demo()
BEGIN
   DECLARE counter INT DEFAULT 0;
   REPEAT
       SET counter = counter + 1;
   UNTIL counter >= 5
   END REPEAT;
END
//
Routine created.

例:dbaccess 中使用oracle 语法

> set environment sqlmode 'oracle';
Environment set.
> CREATE TABLE sales_range_range_no_template1 (
   order_id    NUMBER(10) PRIMARY KEY,
   order_date  DATE,
   amount      NUMBER(10,2),
   region      VARCHAR2(20)
)
PARTITION BY RANGE (order_date)
INTERVAL (NUMTOYMINTERVAL(1, 'MON> TH'))
SUBPARTITION BY RANGE (amount)
(
   PARTITION p202301 VALUES LESS THAN (TO_DATE('2023-02-01', 'YYYY-MM-DD'))
>     (
       SUBPARTITION p202301_small  VALUES LESS THAN (1000),
       SUBPARTITION p202301_medium VALUES LESS THAN (5000),
      >  SUBPARTITION p202301_large  VALUES LESS THAN (MAXVALUE)
   )
);
Table created.
> SELECT TO_DATE('2026-07-03 10:30:00', 'YYYY-MM-DD HH24:MI:SS')
      + INTERVAL '7' DAY
FROM dual;> >

(CONSTANT)
2026-07-10 10:30:00.00000
1 row(s) retrieved.
> CREATE OR REPLACE PROCEDURE proc_print_emp IS
 v_emp_name VARCHAR2(50);
BEGIN
 FOR rec IN (SELECT emp_name FROM employees WHERE dept_id = 10) LOOP
   DBMS_OUTPUT.PUT_LINE(rec.emp_name);
 END LOOP;
END;
/
Routine created.

jdbc连接

jdbc 客户端通过连接串中设置sqlmode参数来指定不同的工作模式

例:mysql模式下运行程序时,url连接串如下:

jdbc:gbasedbt-sqli://172.16.7.15:39088/db2:GBASEDBTSERVER=gbase01;DB_LOCALE=zh_CN.utf8;CLIENT_LOCALE=zh_CN.utf8;sqlmode=mysql

 

例:oracle模式下运行程序时,url连接串如下:

jdbc:gbasedbt-sqli://172.16.7.15:39088/db2:GBASEDBTSERVER=gbase01;DB_LOCALE=zh_CN.utf8;CLIENT_LOCALE=zh_CN.utf8;DELIMIDENT=0;sqlmode=oracle


最佳实践建议:
1. 迁移评估阶段:先用 SET ENVIRONMENT 在dbaccess中验证语法兼容性
2. 应用改造阶段:在JDBC连接串中固定sqlmode参数,确保应用稳定运行
3. 混合场景:不同应用可使用不同模式,实现"一库多模"的灵活架构

GBase 8s的兼容模式切换功能,极大降低了企业数据库迁移的技术门槛。开发者可以根据项目背景灵活选择,实现平滑过渡和高效开发。

评论

登录后才可以发表评论