您的位置:首页 > 其它

[每日一题] OCP1z0-047 :2013-08-16     merge的用法............................................

2013-08-16 20:41 507 查看
转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/10010395





正确答案:A(作为条件判断字段是不能被更新的)B:misplaced(错位),INSERT写法是对的,并没有错位。C:WHERE子句可以放在INSERT后面做为条件。D:视图可以做为数据源(真正的数据来自于视图所对应的表)。 MERGE语句具有按条件获取要更新或插入到表中的数据行,然后从1个或多个源头对表进行更新或者向表中插入行两方面的能力。它最经常被用在数据仓库中来移动大量的数据,但它的应用不仅限于数据仓库环境下。这个语句提供的一个很大的附加值在于你可以很方便地把多个操作结合成一个。这就使你可以避免使用多个INSERT、UPDATE及DELETE语句。MERGE语句的语法是:MERGE <hit>INTO <table_name>USING<table_view_or_query>ON (<condition>)WHEN MATCHED THEN<update_clause>DELETE <where_clause>WHEN NOT MATCHED THEN <insert_clause>[LOG ERRORS <log_errors_clause> reject limit <integer|unlimited>]; 为了说明MERGE语句的用法,我们做个测试:1、创建表
gyj@MYDB> create table dept60_bonuses   2  (employee_id number   3  ,bonus_amt number);  Table created.

2、插入记录
gyj@MYDB> insert into dept60_bonuses values (103, 0);  1 row created.  gyj@MYDB> insert into dept60_bonuses values (104, 100);  1 row created.  gyj@MYDB> insert into dept60_bonuses values (105, 0);  1 row created.  gyj@MYDB> commit;  Commit complete.

3、查询60号部门的员工表和奖金表

gyj@MYDB> select employee_id, last_name, salary   2  from hr.employees   3  where department_id = 60 ;  EMPLOYEE_ID LAST_NAME                     SALARY ----------- ------------------------- ----------         103 Hunold                          9000         104 Ernst                           6000         105 Austin                          4800         106 Pataballa                       4800         107 Lorentz                         4200  gyj@MYDB> select * from dept60_bonuses;  EMPLOYEE_ID  BONUS_AMT ----------- ----------         103          0         104        100         105	    0


4.使用MERGE
gyj@MYDB> merge into dept60_bonuses b   2  using (   3  select employee_id, salary, department_id   4  from hr.employees   5  where department_id = 60) e   6  on (b.employee_id = e.employee_id)   7  when matched then   8  update set b.bonus_amt = e.salary * 0.2   9  where b.bonus_amt = 0  10  delete where (e.salary > 7500)  11  when not matched then  12  insert (b.employee_id, b.bonus_amt)  13  values (e.employee_id, e.salary * 0.1)  14  where (e.salary < 7500);  4 rows merged.

5、再查奖金表
gyj@MYDB> select * from dept60_bonuses;  EMPLOYEE_ID  BONUS_AMT ----------- ----------         104        100         105        960         106        480         106	   420

6、回滚
gyj@MYDB> rollback;  Rollback complete.


7、MERGE语句完成了下面的这些事情:(1)插入了两行(员工ID106和107)(2)更新了一行(员工ID105)(3)删除了一行(员工ID103)(4)一行保持不变(员工ID104)如果没有MERGE语句,你必须最少写3条不同的语句来完成同样的事情。 官方文档语法:






QQ:252803295
学习交流QQ群:
DSI&Core Search Ⅰ 群:127149411(技术:已满)
DSI&Core Search Ⅱ 群:177089463(技术:未满)
DSI&Core Search Ⅲ 群:284596437(技术:未满)
DSI&Core Search Ⅳ 群:192136702(技术:未满)
DSI&Core Search Ⅴ 群:285030382(闲聊:未满)

MAIL:oracledba_cn@hotmail.com
BLOG: http://blog.csdn.net/guoyjoe
WEIBO:http://weibo.com/guoyJoe0218
ITPUB: http://www.itpub.net/space-uid-28460966.html
OCM: http://education.oracle.com/education/otn/YGuo.HTM
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  用法 merge OCP1z0
相关文章推荐