Skip to content

创建OBJECT类型

模式级别创建的结构类型可以持久化存储在数据库中,记载到系统表SYS_TYPES和SYS_OBJECT中。

语法格式

CREATE [ OR REPLACE ] TYPE udt_name AS OBJECT(
	[ variable_define ],
    [ function_declare ],
    [ procedure_declare ]
);

-- 可选,当且仅当 Object 中有声明过程或函数时,才需要该部分
CREATE [ OR REPLACE ] TYPE BODY udt_name
{ IS | AS }
    [ function_define ],
    [ procedure_define ]
END;

参数解释

  • variable_define:变量(或称为属性)定义,其中变量可以是基础类型或UDT数据类型。
  • function_declare:函数声明。函数可分为如下三类:
    • 构造函数:形式为CONSTRUCTOR udt_name(arguments);其中函数名和Object名相同,参数的个数和类型要和本Object中的变量相对应。
    • 静态函数:形式为STATIC function_name([ arguments ])RETURN ret_type;其中arguments为函数的参数,可有一个、多个或无参数,每个参数可以用可选的关键词(IN | OUT | IN OUT)修饰;ret_type为函数的返回值。
    • 普通成员函数:形式为MEMBER function_name([ arguments ]) RETURN ret_type;其中arguments为函数的参数,可有一个、多个或无参数,每个参数可以用可选的关键词(IN | OUT | IN OUT)修饰;ret_type为函数的返回值。
  • procedure_declare:过程声明。过程可分为如下两类:
    • 静态过程:形式为STATIC procedure_name([ arguments ]);其中arguments为过程的参数,可有一个、多个或无参数,每个参数可以用可选的关键词(IN | OUT | IN OUT)修饰。
    • 普通成员过程:形式为MEMBER procedure_name([ arguments ]);其中arguments为过程的参数,可有一个、多个或无参数,每个参数可以用可选的关键词(IN | OUT | IN OUT)修饰。
  • function_define:函数的具体定义。
  • procedure_define:过程的具体定义。

示例

sql
--创建类型:
CREATE OR REPLACE TYPE udt_obj_type AS OBJECT(n NUMERIC,class VARCHAR2,type VARCHAR, dt DATE);

--创建表:
CREATE TABLE obj_tab(id INT,state VARCHAR2,type VARCHAR,udt_obj UDT_OBJ_TYPE);