基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
OBClient Oracle 模式支持
更新时间:2026-06-30 18:11:26
OBClient 支持连接 OceanBase 数据库的 Oracle 模式租户,并提供以下 Oracle 模式特定功能。
概述
OBClient 在连接 Oracle 模式租户时,会自动识别 Oracle 语法特性,包括:
- 使用
/作为语句分隔符(在 PL/SQL 块中) - Oracle 风格的字符串和日期格式
- Oracle 系统函数和包
- PL/SQL 语法支持
DBMS_OUTPUT 支持
OBClient 支持 Oracle 的 DBMS_OUTPUT 包,可以在客户端显示存储过程中的输出信息。请使用 SET SERVEROUTPUT 命令控制是否在查询后拉取并显示 DBMS_OUTPUT 输出:
SET SERVEROUTPUT ON;
SET SERVEROUTPUT OFF;
conn 命令(Oracle 兼容)
OBClient 兼容 Oracle SQL*Plus 的 conn 命令,用于切换连接。
语法
conn [username[/password][@connect_identifier]];
使用示例
同租户切换连接
切换到同一租户下的另一个数据库:
obclient> conn tom@oboraclegbk#obcluster421/tom;
跨租户切换连接
切换到另一个租户:
obclient> conn SYS@oboracle#obcluster421/WElcome12#_;
SQL*Plus 兼容格式
使用 SQL*Plus 兼容的格式:
obclient> conn tom/tom;
说明
conn 命令是 connect 命令的别名,完全兼容 Oracle SQL*Plus 的语法。使用 conn 命令会断开当前连接并建立新连接。
define 命令
define 命令用于定义用户变量,兼容 Oracle SQL*Plus 的变量替换功能。
语法
DEFINE [variable] [= value]
功能说明
- 定义(命名)一个替代变量并为其分配一个 CHAR 值
- 输入
DEFINE后跟变量名以列出变量的值和类型 - 输入不带参数的
DEFINE来列出所有替换变量的值和类型
使用示例
obclient> DEFINE name = 'Alice';
obclient> SELECT 'Hello, &name' FROM dual;
Hello, Alice
obclient> DEFINE name
DEFINE NAME = "Alice" (CHAR)
obclient> DEFINE
DEFINE _DATE = "2024-01-01" (CHAR)
DEFINE NAME = "Alice" (CHAR)
与 SET DEFINE 配合使用
define 命令与 SET DEFINE 命令配合使用,可以控制变量替换的行为。请参阅 SET 变量 了解 SET DEFINE 的详细说明。
/(slash) 分隔符
OBClient 支持使用 / 作为语句分隔符,特别是在执行 PL/SQL 块时。
功能说明
- 执行最近执行的 SQL 命令或存储在 SQL 缓冲区中的 PL/SQL 块
- 斜杠命令的功能类似于
RUN,但不列出命令 - 使用斜杠命令执行 SQL 命令或 PL/SQL 块不会导致 SQL 缓冲区中的当前行号发生更改,除非缓冲区中的命令包含错误
使用示例
在 PL/SQL 块中使用 / 作为分隔符:
obclient> BEGIN
-> DBMS_OUTPUT.PUT_LINE('Hello, OceanBase!');
-> END;
-> /
Hello, OceanBase!
PL/SQL procedure successfully completed.
与其他分隔符的区别
;:SQL 语句分隔符\g:执行当前 SQL 语句\G:垂直显示查询结果/:主要用于 PL/SQL 块的分隔符,兼容 Oracle SQL*Plus
PL/SQL 支持
OBClient 支持 Oracle 模式的 PL/SQL 语法,包括:
- 存储过程、函数和包的创建和执行
- 匿名 PL/SQL 块
- Oracle 数据类型和函数
创建存储过程示例
obclient> CREATE OR REPLACE PROCEDURE hello_world AS
-> BEGIN
-> DBMS_OUTPUT.PUT_LINE('Hello, World!');
-> END;
-> /
Procedure created.
obclient> EXEC hello_world;
Hello, World!
PL/SQL procedure successfully completed.
创建函数示例
obclient> CREATE OR REPLACE FUNCTION add_numbers(a NUMBER, b NUMBER)
-> RETURN NUMBER AS
-> BEGIN
-> RETURN a + b;
-> END;
-> /
Function created.
obclient> SELECT add_numbers(10, 20) FROM dual;
ADD_NUMBERS(10,20)
------------------
30
Oracle 语法兼容性
OBClient 在连接 Oracle 模式租户时,会自动识别以下 Oracle 语法特性:
数据类型
- NUMBER、VARCHAR2、CHAR、DATE、TIMESTAMP 等 Oracle 数据类型
- BLOB、CLOB、NCLOB 等大对象类型
系统函数和包
SYSDATE、SYSTIMESTAMP等日期时间函数DBMS_OUTPUT、DBMS_RANDOM等系统包DUAL表的使用
字符串和日期格式
- Oracle 风格的字符串连接(
||) - Oracle 日期格式函数(
TO_CHAR、TO_DATE等)
示例
obclient> SELECT SYSDATE FROM dual;
SYSDATE
----------
2024-01-01 12:00:00
obclient> SELECT 'Hello' || ' ' || 'World' AS greeting FROM dual;
GREETING
----------
Hello World
obclient> SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM dual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI:SS')
----------------------------------------
2024-01-01 12:00:00