OceanBase 开发者中心(OceanBase Developer Center,ODC)支持可视化方式创建类型。本文介绍如何使用 ODC 创建类型。
概述
数据库类型对象用于指定类型的名称及其属性、方法和其它属性。
ODC 类型对象支持创建三种类型:对象类型、数组类型和表类型。
对象类型:抽象数据类型(Abstract Data Type,ADT),是将数据库对象、数据库对象之间的关系和数据库对象的基本操作封装在一起的一种表达方式。
数组类型:可变数组与嵌套表相似,也是一种集合。一个可变数组是对象的一个集合,其中每个对象都具有相同的数据类型。可变数组的大小由创建时决定。允许表的列的数据类型是可变长度的多维数组。数组的类型可以是任何基本类型、枚举类型、复合类型或用户自定义类型。
表类型:独立嵌套表类型,用创建的数组直接定义到表的列上。
如上图所示,创建类型包含以下 4 个步骤:
本文档以在 ODC 中创建对象类型(ob_var)为例,类型中包含 var 和 var1 两个 varchar 类型的参数。
文中所使用的均为示例数据,您可根据实际情况对数据进行替换。
操作步骤
步骤一:指定类型名称
在 OceanBase 开发者中心(OceanBase Developer Center,ODC)单击连接名进入连接后,在左导航栏中单击 类型标签可以查看类型列表。在类型列表的右上角,单击 +创建类型,或在顶部导航栏中单击 新建以创建所需对象。
步骤二:选择新建的类型对象
类型 | 说明 | 示例 |
对象类型 | 抽象数据类型(ADT)。 说明 只有对象类型包含子程序。 |
|
数组类型 | 独立可变数组(varray)类型。 |
|
表类型 | 独立嵌套表类型。 |
通过 |
步骤三:编辑语句
指定上述信息后,单击 下一步按钮,进入语句编辑页面,在语句编辑页面中会根据在 新建类型弹窗中指定的信息生成对应的类型定义语句,用户需要根据需求补齐语句。补齐语句后,单击页面右上角的 创建按钮,完成类型的创建。
同时,在编辑页面的工具栏中提供了以下功能键:
功能 | 说明 |
格式化 | 单击该按钮对选中的 SQL 语句或当前 SQL 窗口中的所有 SQL 语句进行统一的格式化(缩进、换行和高亮关键字等操作)。 |
查找/替换 | 在查找框内输入内容以对脚本进行检索,查找后可在替换框内输入内容以对查找内容进行替换。 |
撤销 | 脚本回退到上一步操作执行的结果。 |
重做 | 执行 撤销操作后,对脚本重新执行撤销前的操作。 |
大小写 | 提供全部大写、全部小写和 首字母大写三种效果,为脚本中选中的语句转换为对应形式。 |
缩进 | 提供 添加缩进和 删除缩进两种效果,为脚本中选中的语句添加或删除包含的缩进。 |
注释 | 提供 添加注释和 删除注释两种效果,为脚本中选中的语句转换为注释或转换为 SQL 语句。 |
IN 值转化 | 可以将如 A B 的格式转化为 ('A','B') 的格式。 |
步骤四:完成新建类型
单击 创建,完成新建类型后,类型通常用于 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;
/