oracle自定义类型

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a275838263/article/details/51062782

最近整理里常见数据库的数据类型,发现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命令不能使用在自定义的数据类型中。
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页