1. 創建department對象類型
create type department as object
(
dept_id number(4),
dept_name varchar2(30)
);
2. 創建employee對象類型
create type employee as object
(
emp_id number(6),
firstname varchar2(20),
job varchar2(10),
mgr number(6),
hiredate date,
sal number(8,2),
comm number(8,2),
dept ref department,
member function wages return number
as language java
name 'Paymaster.wages() return java.math.BigDecimal',
member procedure raise_sal(r number)
as language java
name 'Paymaster.raiseSal(java.math.BigDecimal)'
);
3. 創建兩個對象表
create table depts of department as
select department(department_id,department_name) from departments;
create table emps of employee as
select employee(e.employee_id, e.first_name, e.job_id, e.manager_id,
e.hire_date, e.salary, e.commission_pct,
ref(d))
--(select ref(d) from depts d where d.dept_id = e.department_id))
from employees e, depts d
where e.department_id = d.dept_id;
4. 實現java類
5. 測試
select e.firstname,e.sal,value(e).wages(),e.dept.dept_name from emps e
where e.comm is not null;
-- 要調用employee的成員方法,要使用value函數將實例轉換爲employee,再調用wages()方法。
-- 要調用reference的dept中的成員屬性,必須要別名來引用。
declare
pe employee;
begin
select value(e) into pe from emps e
where e.emp_id = 100;
pe.raise_sal(3333);
dbms_output.put_line(pe.sal);
update emps e set e = pe
where e.emp_id = pe.emp_id;
end;