新建类型

概述

数据库类型对象用于指定类型的名称及其属性、方法和其它属性。

ODC 类型对象支持创建三种类型:对象类型、数组类型和表类型。

  • 对象类型:抽象数据类型(Abstract Data Type,ADT,是将数据库对象、数据库对象之间的关系和数据库对象的基本操作封装在一起的一种表达方式。

  • 数组类型:可变数组与嵌套表相似,也是一种集合。一个可变数组是对象的一个集合,其中每个对象都具有相同的数据类型。可变数组的大小由创建时决定。允许表的列的数据类型是可变长度的多维数组。数组的类型可以是任何基本类型、枚举类型、复合类型或用户自定义类型。

  • 表类型:独立嵌套表类型,用创建的数组直接定义到表的列上。

类型-新建类型

如上图所示,创建类型包含以下 4 个步骤:

  1. 指定类型名称

  2. 选择新建的类型对象

  3. 编辑语句

  4. 完成新建类型

操作步骤

以在 ODC 中创建对象类型(ob_var)为例,类型中包含 var 和 var1 两个 varchar 类型的参数。具体操作步骤如下:

步骤 1:指定类型名称

在 OceanBase 开发者中心(OceanBase Developer Center,ODC)单击连接名进入连接后,在左导航栏中单击 类型 标签可以查看类型列表。在类型列表的右上角,单击 + 创建类型,或在顶部导航栏中单击 新建 以创建所需对象。

Image 154

步骤 2:选择新建的类型对象

类型

说明

示例

对象类型

抽象数据类型(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>。

步骤 3:编辑语句

类型-新建类型-步骤三

指定上述信息后,单击 下一步 按钮,进入语句编辑页面,在语句编辑页面中会根据在 新建类型 弹窗中指定的信息生成对应的类型定义语句,用户需要根据需求补齐语句。补齐语句后,单击页面右上角的 创建 按钮,完成类型的创建。

同时,在编辑页面的工具栏中提供了以下功能键:

功能

说明

格式化

单击该按钮对选中的 SQL 语句或当前 SQL 窗口中的所有 SQL 语句进行统一的格式化(缩进、换行和高亮关键字等操作)。

查找/替换

在查找框内输入内容以对脚本进行检索,查找后可在替换框内输入内容以对查找内容进行替换。

撤销

脚本回退到上一步操作执行的结果。

重做

执行 撤销 操作后,对脚本重新执行撤销前的操作。

大小写

提供 全部大写全部小写首字母大写 三种效果,为脚本中选中的语句转换为对应形式。

缩进

提供 添加缩进删除缩进 两种效果,为脚本中选中的语句添加或删除包含的缩进。

注释

提供 添加注释删除注释 两种效果,为脚本中选中的语句转换为注释或转换为 SQL 语句。

步骤 4:完成新建类型

单击 创建,完成新建类型后,类型通常用于 PL 语句中,使用关键字 INSERT 调用用户自定义的类型。

类型-新建类型-步骤4
说明

在左侧导航栏中,右键鼠标单击类型列表中的类型名,通过弹出的管理操作列表(包括 查看新建下载删除刷新),可快速管理和操作目标对象。

类型具体操作,请参见 管理类型

示例:

-- 创建表
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;
/

相关信息

阿里云首页 云数据库 OceanBase 相关技术圈