当前位置:数据库 > Oracle >>

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命令不能使用在自定义的数据类型中。
 
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,