java merge into_Oracle merge into的使用
最近項目上使用Oracle的Merge,所以找來一下資料學習了解。
該命令使用一條語句從一個或者多個數據源中完成對表的更新和插入數據. ORACLE 9i 中,使用此命令必須同時指定UPDATE 和INSERT 關鍵詞,ORACLE 10g 做了如下改動。
特點:
1、insert 和update是可選的 ;
2、UPDATE 和INSERT 后面可以跟WHERE 子句 ;
3、在ON條件中可以使用常量來insert 所有的行到目標表中,不需要連接到源表和目標表 ;
4、UPDATE 子句后面可以跟delete 來去除一些不需要的行。
create table PRODUCTS
(
PRODUCT_ID INTEGER,
PRODUCT_NAME VARCHAR2(60),
CATEGORY VARCHAR2(60)
);
insert into PRODUCTS values (1501, 'VIVITAR 35MM', 'ELECTRNCS');
insert into PRODUCTS values (1502, 'OLYMPUS IS50', 'ELECTRNCS');
insert into PRODUCTS values (1600, 'PLAY GYM', 'TOYS');
insert into PRODUCTS values (1601, 'LAMAZE', 'TOYS');
insert into PRODUCTS values (1666, 'HARRY POTTER', 'DVD');
commit;
create table NEWPRODUCTS
(
PRODUCT_ID INTEGER,
PRODUCT_NAME VARCHAR2(60),
CATEGORY VARCHAR2(60)
);
insert into NEWPRODUCTS values (1502, 'OLYMPUS CAMERA', 'ELECTRNCS');
insert into NEWPRODUCTS values (1601, 'LAMAZE', 'TOYS');
insert into NEWPRODUCTS values (1666, 'HARRY POTTER', 'TOYS');
insert into NEWPRODUCTS values (1700, 'WAIT INTERFACE', 'BOOKS');
commit;
1,可省略的update 或者insert
MERGE INTO products p
2 USING newproducts np
3 ON (p.product_id = np.product_id)
4 WHEN MATCHED THEN
5 UPDATE
6 SET p.product_name = np.product_name,
7 p.category = np.category;
使用表newproducts中的product_name 和category字段來更新表products 中相同product_id的product_name 和category.
2,當條件不滿足的時候把newproducts表中的數據INSERT 到表products中。
MERGE INTO products p
USING newproducts np
ON (p.product_id = np.product_id)
WHEN NOT MATCHED THEN
INSERT
VALUES (np.product_id, np.product_name,
np.category);
3,帶條件的insert 和update
MERGE INTO products p
USING newproducts np
ON (p.product_id = np.product_id)
WHEN MATCHED THEN
UPDATE
SET p.product_name = np.product_name
WHERE p.category = np.category;
insert 和update 都帶有where 字句
MERGE INTO products p
USING newproducts np
ON (p.product_id = np.product_id)
WHEN MATCHED THEN
UPDATE
SET p.product_name = np.product_name,
p.category = np.category
WHERE p.category = 'DVD'
WHEN NOT MATCHED THEN
INSERT
VALUES (np.product_id, np.product_name, np.category)
WHERE np.category != 'BOOKS'
4,無條件的insert
MERGE INTO products p
USING newproducts np
ON (1=0)
WHEN NOT MATCHED THEN
INSERT
VALUES (np.product_id, np.product_name, np.category)
WHERE np.category = 'BOOKS'
5,delete 子句
1? merge into products p
2? using newproducts np
3? on(p.product_id = np.product_id)
4? when matched then
5? update
6? set p.product_name = np.product_name
7? delete where category = 'macle1_cate';
select *
from products;
PRODUCT_ID PRODUCT_NAME???????? CATEGORY
--------------------------------------- -------------------- --------------------
1502 macle22????????????? macle2_cate
1503 macle3??????????????? macle2_cate
1504 macle????????????????? macle1_cate
1505 macle5??????????????? macle5_cate
1504 中的macle1_cate 滿足delete where,但是不滿足 on 中的條件,所以沒有被刪除。!!!!!!
在進行SQL語句編寫時,我們經常會遇到大量的同時進行Insert/Update的語句?,也就是說當存在記錄時,就更新(Update),不存在數據時,就插入(Insert)。
MERGE INTO table_name alias1
USING (table|view|sub_query) alias2
ON (join condition)
WHEN MATCHED THEN
UPDATE table_name
SET col1 = col_val1,
col2???? = col2_val
WHEN NOT MATCHED THEN
INSERT (column_list) VALUES (column_values);
用中文來解釋Merge語法,就是:
在alias2中Select出來的數據,每一條都跟alias1進行 ON (join condition)的比較,如果匹配,就進行更新的操作(Update),如果不匹配,就進行插入操作(Insert)。
總結
以上是生活随笔為你收集整理的java merge into_Oracle merge into的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: db2和mysql性能优化_DB2数据库
- 下一篇: 关闭终端php就退出进程_解决windo