Oracle database 使用SQL转换数据 使用 merge语句 理论试验

1、使用Merge语句

为了方便,先把原来生成的表列名字改回去

alter table new_employees4_yearly_payment
rename column yearly_salary to salary_new;

先看看目标表:

SQL> select * from new_employees4;

EMPLOYEE_ID SALARY_NEW DEPARTMENT_ID LAST_NAME
----------- ---------- ------------- -------------------------
FIRST_NAME
--------------------
	108    13208.8		 100 Greenberg
Nancy

	109	  9900		 100 Faviet
Daniel

	110	  9020		 100 Chen
John


再看看源表:

select * from new_employees4_yearly_payment;

EMPLOYEE_ID SALARY_NEW DEPARTMENT_ID LAST_NAME
----------- ---------- ------------- -------------------------
FIRST_NAME
--------------------
	120	 96000		  66 kong
weiyi

	120	  1200		  66 liu
yifei

	120	  1200		  66 fan
binbin


然后使用merge语句把原表更新:

merge into new_employees4 aa

using new_employees4_yearly_payment  bb

on (aa.department_id=bb.department_id)

when matched then 

update set aa.salary_new=bb.salary_new*1.1

when not matched 

then insert (first_name, last_name, employee_id, salary_new, department_id)

VALUES (bb.first_name,bb.last_name,bb.employee_id,bb.salary_new,bb.department_id);

注意这里values里面的列顺序要和目标表的列顺序一致,否者如果出现列的属性对不上的情况会报错:ORA-01722: invalid number(或其它)  这是为什么呢???

然后再看看目标表:

SQL> select * from new_employees4;

EMPLOYEE_ID SALARY_NEW DEPARTMENT_ID LAST_NAME
----------- ---------- ------------- -------------------------
FIRST_NAME
--------------------
	108    13208.8		 100 Greenberg
Nancy

	109	  9900		 100 Faviet
Daniel

	110	  9020		 100 Chen
John


EMPLOYEE_ID SALARY_NEW DEPARTMENT_ID LAST_NAME
----------- ---------- ------------- -------------------------
FIRST_NAME
--------------------
	120	  1200		  66 fan
binbin

	120	  1200		  66 liu
yifei

	120	 96000		  66 kong
weiyi


6 rows selected.

SQL> 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值