oracle自定义字段类型

[b]目标:[/b]
[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命令不能使用在自定义的数据类型中。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值