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;
/