首批通过分布式安全可靠测评,为关键业务系统打造
新建类型
更新时间:2026-04-13 15:31:21
OceanBase 开发者中心(OceanBase Developer Center,ODC)支持可视化方式创建类型。本文介绍如何使用 ODC 创建类型。
概述
数据库类型对象用于指定类型的名称及其属性、方法和其它属性。
ODC 类型对象支持创建三种类型:对象类型、数组类型和表类型。
对象类型:抽象数据类型(Abstract Data Type,ADT),是将数据库对象、数据库对象之间的关系和数据库对象的基本操作封装在一起的一种表达方式。
数组类型:可变数组与嵌套表相似,也是一种集合。一个可变数组是对象的一个集合,其中每个对象都具有相同的数据类型。可变数组的大小由创建时决定。允许表的列的数据类型是可变长度的多维数组。数组的类型可以是任何基本类型、枚举类型、复合类型或用户自定义类型。
表类型:独立嵌套表类型,用创建的数组直接定义到表的列上。
创建类型包含以下 4 个步骤:
- 指定类型名称。
- 选择类型对象。
- 编辑语句。
- 完成新建类型。
本文档以在 ODC 中创建对象类型 ob_var 为例,类型中包含 var 和 var1 两个 varchar 类型的参数。
说明
文中所使用的均为示例数据,您可根据实际情况对数据进行替换。
操作步骤
步骤一:指定类型名称
在 OceanBase 开发者中心(OceanBase Developer Center,ODC)单击连接名进入连接后,在左导航栏中单击 类型 标签可以查看类型列表。在类型列表的右上角,单击 + 创建类型,或在顶部导航栏中单击 新建 以创建所需对象。

步骤二:选择新建的类型对象
| 类型 | 说明 | 示例 |
|---|---|---|
| 对象类型 | 抽象数据类型(ADT)。
说明只有对象类型包含子程序。 |
CREATE OR REPLACE TYPE ob_var AS OBJECT( var varchar2(10), var1 varchar(10) ); |
| 数组类型 | 独立可变数组(varray)类型。 | CREATE OR REPLACE TYPE test AS VARRAY(20) of varchar2(20); |
| 表类型 | 独立嵌套表类型。 | CREATE OR REPLACE TYPE test AS TABLE OF varchar2(100 BYTE); 通过 AS TABLE OF 创建一个数组 list<test>。 |
步骤三:编辑语句

指定上述信息后,单击 下一步 按钮,进入语句编辑页面,在语句编辑页面中会根据在 新建类型 弹窗中指定的信息生成对应的类型定义语句,用户需要根据需求补齐语句。补齐语句后,单击页面右上角的 创建 按钮,完成类型的创建。
步骤四:完成新建类型
单击 创建 ,完成新建类型后,类型通常用于 PL 语句中,使用关键字 INSERT 调用用户自定义的类型。

说明
示例:
-- 创建表
create table data_type (id number(10),name varchar2(50),age int,address varchar2(50),salary float);
-- 插入表数据
insert into data_type values(1,'baba',20,'hangzhou',3000.00);
-- 新建类型
create or replace type ob_var as object(
var varchar2(10),
var1 varchar(10)
);
delimiter /
-- 新建存储过程
create or replace procedure p_datatype is
begin
declare
rec data_type%rowtype;
v_age rec.age%type;
var varchar2(50);
v_name var%type;
v_salary data_type.salary%type;
-- 自定义类型
type salary is table of number index by varchar2(20);
arr salary;
v_arr arr%type;
CURSOR c2 IS SELECT name, age FROM data_type;
c_row c2%rowtype;
v_rec c_row%type;
ob ob_var;
v_obj ob%type;
begin
v_name := 'ali ';
v_age := 30;
v_salary := 2000;
dbms_output.put_line('被引用项:变量,记录,表列名称:' || v_name || ' * ' || v_age || ' * ' || v_salary);
v_arr('James') := 78000;
dbms_output.put_line('被引用项:集合变量的名称:' || v_arr.FIRST);
open c2;
fetch c2 into v_rec;
dbms_output.put_line('被引用项:游标变量名称:' || v_rec.name || ' * ' || v_rec.age);
close c2;
v_obj:=ob_var('test','object');
dbms_output.put_line('被引用项:对象实例的名称:' || v_obj.var || ' * ' || v_obj.var1);
end;
end;
/
begin
p_datatype;
end;
/