创建类型头¶
语法
create_type ::=
method_spec ::=
function_spec ::=
procedure_spec ::=
parm_decls ::=
parm_decl ::=
constructor_spec ::=
参数:
AUTHID {CURRENT_USER | DEFINER}
AUTHID CURRENT_USER和AUTHID DEFINER选项在创建类型时只是支持了语法,但没有实际作用。
注解
类型中至少要有一个成员变量,最多不超过1024个
类型中成员变量的类型不能是包中定义的自定义类型,必须是内置数据库类型或通过create type语句创建的类型
创建类型时会为类型创建默认的构造函数,sql中可以通过调用默认的构造函数创建一个类型的对象,但暂时还不支持在sql中调用用户自定义的构造函数
类型中的成员方法第一个参数必须是self参数,且self变量的类型必须为类型本身。用户声明成员方法时可以省略self变量的声明,oscar会为成员方法加上self参数
类型支持嵌套
类型字段不能有默认值
示例:
--创建类型头
CREATE OR REPLACE TYPE typ_calendar AS OBJECT(
年 VARCHAR2(8),
月 VARCHAR2(8),
星期日 VARCHAR2(8),
星期一 VARCHAR2(8),
星期二 VARCHAR2(8),
星期三 VARCHAR2(8),
星期四 VARCHAR2(8),
星期五 VARCHAR2(8),
星期六 VARCHAR2(8),
本月最后一日 VARCHAR2(2),
MEMBER FUNCTION format(
curday DATE := '2015-03-19 10:52:27.827668',
fmtlen PLS_INTEGER := 8
)RETURN typ_calendar
);
/
CREATE OR REPLACE TYPE tp IS OBJECT(att1 INT, att2 INT,
MEMBER FUNCTION func(a INT) RETURN INT,
MEMBER PROCEDURE proc(self tp, a INT),
STATIC FUNCTION func RETURN INT,
STATIC PROCEDURE proc);
/