首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >oracle数据库,插入数据

oracle数据库,插入数据
EN

Stack Overflow用户
提问于 2018-03-16 12:58:58
回答 1查看 80关注 0票数 0

我使用的是Oracle 11g表:

代码语言:javascript
复制
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)
)
/

我插入的数据

代码语言:javascript
复制
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小姐),

经理(罗斯史密斯小姐)是会计主管(简史密斯先生),

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-17 15:45:34

您正在插入employee类型的记录:这适用于整个记录,因此您需要编写一个与该类型的投影匹配的VALUES子句。

要填充REF子句,需要选择相关对象的引用。您的第一条记录没有主管,所以我们在本例中传递NULL:

代码语言:javascript
复制
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
    ))
/

对于其他记录我们使用插入..。选择。来自语法:

代码语言:javascript
复制
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不能很好地处理用户定义的类型。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49321373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档