我使用的是Oracle 11g表:
create or replace type address as object (
street varchar2(20),
city varchar2(10),
p_code varchar2(8)
) not final;
/
create or replace type name as object (
title varchar2(5),
firstName varchar2(8),
surname varchar2(8)
) not final;
/
create or replace type phone as object
(
homePhone int,
mobile1 int,
mobile2 int
) not final;
/
create or replace type person as object (
pname name,
pAddress address,
Pphone phone
) not final;
/
create or replace type employee under person (
empId varchar2(5),
position varchar2(16),
salary int,
joinDate date,
supervisor ref employee);
/
create table tb_employee of employee
(
primary key(empID)
)
/我插入的数据
insert into tb_employee values
(
person(name('mr','jone','smith'),address('street','city','post
code'),phone('11111111111','22222222222','33333333333')),
position('head'),
salary(1111),
joinDate(12-Feb-1994),
empID('001')
)
insert into tb_employee values
(
person(name('mr','jane','smith'),address('street','city','post
code'),phone('11111111111','22222222222','33333333333')),
position('accountant'),
salary(2222,
joinDate(13-Feb-1995),
empID('002')
)
insert into tb_employee values
(
person(name('miss','ross','smith'),address('street','city','post
code'),phone('11111111111','22222222222','33333333333')),
position(manager),
salary(333),
joinDate(14-Feb-1996),
empID('003')
) 我想使用引用函数将监督者插入数据,
例如: head (jone smith)是主管或经理( ross smith小姐),
经理(罗斯史密斯小姐)是会计主管(简史密斯先生),
谢谢!
发布于 2018-03-17 15:45:34
您正在插入employee类型的记录:这适用于整个记录,因此您需要编写一个与该类型的投影匹配的VALUES子句。
要填充REF子句,需要选择相关对象的引用。您的第一条记录没有主管,所以我们在本例中传递NULL:
insert into tb_employee values
( employee(
name('mr','jone','smith')
, address('street','city','postcode')
, phone('11111111111','22222222222','33333333333')
, '001' -- emp id
, 'head' -- position
, 11111 -- salary
, to_date('12-Feb-1994','dd-mon-yyyy') -- joinDate
, null-- supervisor
))
/对于其他记录我们使用插入..。选择。来自语法:
insert into tb_employee
select
employee(
name('mr','jane','smith')
, address('street','city','postcode')
, phone('11111111111','22222222222','33333333333')
, '002' -- emp id
, 'accountant' -- position
, 2222 -- salary
, to_date('13-Feb-1995','dd-mon-yyyy') -- joinDate
, ref (m) -- supervisor
)
from tb_employee m
where m.empid = '001'
/
insert into tb_employee
select
employee(
name('miss','ross','smith')
, address('street','city','postcode')
, phone('11111111111','22222222222','33333333333')
, '003' -- emp id
, 'manager' -- position
, 333 -- salary
, to_date('14-Feb-1996','dd-mon-yyyy') -- joinDate
, ref (m) -- supervisor
)
from tb_employee m
where m.empid = '002'
/ 这是Oracle演示程序(需要免费的LiveSQL帐户)。(遗憾的是,Oracle的developer不能很好地处理用户定义的类型。)
https://stackoverflow.com/questions/49321373
复制相似问题