Oracle 合并 merger into

merge into copy_emp1 c
  using employees e
  on (c.employee_id=e.employee_id)
when matched then
  update set
  c.first_name=e.first_name,
  c.last_name=e.last_name,
  c.email=e.email,
  c.phone_number=e.phone_number,
  c.hire_date=e.hire_date,
  c.job_id=e.job_id,
  c.salary=e.salary,
  c.commission_pct=e.commission_pct,
  c.manager_id=e.manager_id,
  c.department_id=e.department_id
when not matched then
  insert values(e.employee_id,e.first_name,e.last_name,e.email,e.phone_number,
  e.hire_date,e.job_id,e.salary,e.commission_pct,e.manager_id,e.department_id)


注意:被on关联的列(employee_id)不能被更新,否则会报错ORA-38104:无法

更新on子句中引用的列。

 

--实验
JOHN@ ora10g> select * from jobs;

JOB_ID     JOB_TITLE    MIN_SALARY MAX_SALARY
---------- ------------ ---------- ----------
ad_pres    vp                20000      40000
fi_account accountant         4200       9000
st_clerk   stock clerk        2000       5000
it_prog    programmer         4000      10000
dba        db admin           4200       9000


JOHN@ ora10g> select * from jobs_acquisition;

JOB_ID     JOB_TITLE    MIN_SALARY MAX_SALARY
---------- ------------ ---------- ----------
ad_pres    vp                10000      40000
dba        db admin           4200       9000


JOHN@ ora10g> merge into jobs j
  2  using (select * from jobs_acquisition) a
  3  on (j.job_id=a.job_id)
  4  when matched then
  5  update set
  6  j.job_title=a.job_title,
  7  j.min_salary=a.min_salary,
  8  j.max_salary=a.max_salary
  9  when not matched then
 10  insert (j.job_id, j.job_title, j.min_salary, j.max_salary)
 11  values (a.job_id, a.job_title, a.min_salary, a.max_salary);


JOHN@ ora10g> select * from jobs;

JOB_ID     JOB_TITLE    MIN_SALARY MAX_SALARY
---------- ------------ ---------- ----------
ad_pres    vp                10000      40000
fi_account accountant         4200       9000
st_clerk   stock clerk        2000       5000
it_prog    programmer         4000      10000
dba        db admin           4200       9000


JOHN@ ora10g> select * from jobs_acquisition;

JOB_ID     JOB_TITLE    MIN_SALARY MAX_SALARY
---------- ------------ ---------- ----------
ad_pres    vp                10000      40000
dba        db admin           4200       9000

转载于:https://www.cnblogs.com/john2017/p/6371615.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值