oracle自定義型別

2021-07-10 23:27:17 字數 2904 閱讀 2903



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,  

'***', 

propertyvalue(10, null,null), 

'number', 

'***', 

101, 

101, 

sysdate, 

sysdate); 

commit; 

5、查詢資料

sql** 

select isp.propertyvalue.getnumbervalue() as myvalues 

from  

igrp_sys_properties isp  

where  

isp.propertykey = '***'  

and isp.propertytype = 'number';  

一些注意的地方:

1. 資料型別使用在資料表後,其body是不能改變的。 因此,要先drop和型別有關的表,才能修改其body。

2. export和import可能會有問題。

3. sql*plus 的copy命令不能使用在自定義的資料型別中。

oracle 自定義型別

而如果沒有這句話 index by binary integer 那就得要顯示對初始化,且每插入乙個元素到numbers型別的table中時,都需要先extend.示例 沒加 index by binary integer 時 declare type my number arr is table ...

oracle 自定義型別

例1 批量 查詢部門號為 10 號的並把它們列印出來 declare type emp table type is table of my emp rowtype index by binary integer v emp table emp table type begin select bulk...

自定義型別

typedef型別 typedef 已有型別 新建型別 示例 typedef double area,volume typedef int number number i1 area a enum enum 列舉型別名 enum week 預設sun 0,可以比較 如果修改必須形如enum week...