oracle自定义类型


最近整理里常见数据库的数据类型,发现o racle有一个自定义字段类型。简单的研究了一下:
 
1、定义一个类型
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 
); 
 
2、编写类型的方法
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; 
 
 
3、使用自定义类型为字段创建表
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 '修改日期';         
 
 
4、添加数据
insert into IGRP_SYS_PROPERTIES VALUES 
(SQ_IGRP_PROPERTYID.nextval,  
'xxx', 
PropertyValue(10, null,null), 
'number', 
'xxx', 
101, 
101, 
sysdate, 
sysdate); 
commit; 
 
 
5、查询数据
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命令不能使用在自定义的数据类型中。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值