Oracle数据库中的OOP概念(1)(3)
Order 方法:
create or replace
type employee as object(
name person,
empno number,
hiredate date,
sal number,
commission number,
order member function match(p_employee employee) return integer)
/
create or replace
type body employee as
order member function match(p_employee employee) return integer is
begin
if self.empno> p_employee.empno then
return 1;
elseif self.empno< p_employee.empno then
return -1;
else
return 0;
end if;
end;
end;
/
继承:
FINAL / NOT FINAL
对象默认FINAL,表示不可以被继承;
MEMBER方法也能指定是否FINAL,表示能否在子类中对他进行覆写。默认NOT FINAL
Create or replace type super_type as object(
N number,
Final member procedure cannot_override
)
not final
/create or replace type sub_type under super_type(
overriding member procedure cannot_override
)
/
show error
若super_type 改成final
INSTANTIABLE / NOT INSTANTIABLE
可否被实例化,后者类似于抽象类
create or replace type shape as object(
number_of_sides number,
not instantiable member function calculate_area return number
)
not instantiable not final
/
实例化该类型对象:
declare
l_shape shape;
begin
l_shape:=shape(2);
end;
/
可变数组(VARRAYS):
create type employee_type as object(
employee_id number,
first_name varchar2(30),
last_name varchar2(30)
)
/
create type employee_list_type as varray(50) of employee_type
/
create table departments(
department_id number,
department_name varchar2(30),
manager employee_type,
employees employee_list_type)
/
insert into departments values
(10,
‘HR’,
employee_type(1,’Dony’,’Chen’),
employee_list_type(
employee_type(2,’Hua’,’Li’)
employee_type(3,’Wu’,’Wang’)
employee_type(4,’San’,’Zhang’))
)
/
column department_name format a13
column employee_type format a63 word_wrapped
select * from departments
/
嵌套表(Nested table):
create type order_item_type as object(
line_item_id number(3),
product_id number(6),
unit_price numbe(8,2),
quantity number(4)
)
/
create type order_item_list_type as table of order_item_type
/
create table orders(
order_id number(12) not null,
order_date date,
customer_id number(6),
order_items order_item_list_type)
nested table order_items store as order_items_tab
/
insert into orders values(
(1, sysdate, 10,
order_item_list_type(
order_item_type(1,2,3,4),
order_item_type(2,3,4,5)
))
/
多少个order_item_type ,无限制。
- 上一篇:磁盘排序对Oracle数据库性能的影响(1)
- 下一篇:ASM数据库自动存储管理浅析



