创建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);