oracle自定义字段类型
oracle自定义字段类型
目标:
定义一个类型
编写类型的方法
使用自定义的类型为字段创建表
添加数据的方法
查询数据的方法
其它
定义一个类型
Sql代码
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
);
编写类型的方法
Sql代码
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;
使用自定义类型为字段创建表
Sql代码
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 '修改日期';
添加数据
Sql代码
insert into IGRP_SYS_PROPERTIES VALUES
(SQ_IGRP_PROPERTYID.nextval,
'xxx',
PropertyValue(10, null,null),
'number',
'xxx',
101,
101,
sysdate,
sysdate);
commit;
查询数据
Sql代码
select isp.propertyValue.getNumberValue() as myValues
from
IGRP_SYS_PROPERTIES isp
where
isp.propertyKey = 'xxx'
and isp.propertyType = 'number';
其它
1. 数据类型使用在数据表后,其BODY是不能改变的。 因此,要先DROP和类型有关的表,才能修改其BODY。
2. EXPORT和IMPORT会有问题。
3. SQL*Plus 的COPY命令不能使用在自定义的数据类型中。