[b]目标:[/b]
[list]
[*] 定义一个类型
[*] 编写类型的方法
[*] 使用自定义的类型为字段创建表
[*] 添加数据的方法
[*] 查询数据的方法
[*] 其它
[/list]
[b]定义一个类型[/b]
[b]编写类型的方法[/b]
[b]使用自定义类型为字段创建表[/b]
[b]添加数据[/b]
[b]查询数据[/b]
[b]其它[/b]
1. 数据类型使用在数据表后,其BODY是不能改变的。 因此,要先DROP和类型有关的表,才能修改其BODY。
2. EXPORT和IMPORT会有问题。
3. SQL*Plus 的COPY命令不能使用在自定义的数据类型中。
[list]
[*] 定义一个类型
[*] 编写类型的方法
[*] 使用自定义的类型为字段创建表
[*] 添加数据的方法
[*] 查询数据的方法
[*] 其它
[/list]
[b]定义一个类型[/b]
CREATE OR REPLACE TYPE PropertyValue AS OBJECT (
number_value number,
string_value varchar2(2000),
date_value date,
MEMBER FUNCTION getNumberValue RETURN number,
MEMBER FUNCTION getStringValue RETURN varchar2,
MEMBER FUNCTION getDateValue RETURN date
);
[b]编写类型的方法[/b]
CREATE OR REPLACE TYPE BODY PropertyValue AS
MEMBER FUNCTION getNumberValue RETURN number AS
BEGIN
RETURN number_value;
END getNumberValue;
MEMBER FUNCTION getStringValue RETURN varchar2 AS
BEGIN
RETURN string_value;
END getStringValue;
MEMBER FUNCTION getDateValue RETURN date AS
BEGIN
RETURN date_value;
END getDateValue;
END;
[b]使用自定义类型为字段创建表[/b]
create table IGRP_SYS_PROPERTIES (
nid number primary key,
propertyKey varchar2(2000),
propertyValue PropertyValue,
propertyType varchar2(2000),
description varchar2(2000),
createUserId number,
modifyUserId number,
createDate date,
modifyDate date);
CREATE SEQUENCE SQ_IGRP_PROPERTYID
START WITH 1
INCREMENT BY 1
MAXVALUE 1E27
MINVALUE 1
NOCYCLE
CACHE 20
NOORDER;
-- Add comments to the columns
comment on column IGRP_SYS_PROPERTIES.nid
is 'PK唯一值';
comment on column IGRP_SYS_PROPERTIES.propertyKey
is '属性键';
comment on column IGRP_SYS_PROPERTIES.propertyValue
is '属性值';
comment on column IGRP_SYS_PROPERTIES.propertyType
is '属性类型';
comment on column IGRP_SYS_PROPERTIES.description
is '描述';
comment on column IGRP_SYS_PROPERTIES.createUserId
is '创建用户ID';
comment on column IGRP_SYS_PROPERTIES.modifyUserId
is '修改用户ID';
comment on column IGRP_SYS_PROPERTIES.createDate
is '创建日期';
comment on column IGRP_SYS_PROPERTIES.modifyDate
is '修改日期';
[b]添加数据[/b]
insert into IGRP_SYS_PROPERTIES VALUES
(SQ_IGRP_PROPERTYID.nextval,
'xxx',
PropertyValue(10, null,null),
'number',
'xxx',
101,
101,
sysdate,
sysdate);
commit;
[b]查询数据[/b]
select isp.propertyValue.getNumberValue() as myValues
from
IGRP_SYS_PROPERTIES isp
where
isp.propertyKey = 'xxx'
and isp.propertyType = 'number';
[b]其它[/b]
1. 数据类型使用在数据表后,其BODY是不能改变的。 因此,要先DROP和类型有关的表,才能修改其BODY。
2. EXPORT和IMPORT会有问题。
3. SQL*Plus 的COPY命令不能使用在自定义的数据类型中。