oracle merge

 create table PRODUCTS
    (
    PRODUCT_ID INTEGER,
    PRODUCT_NAME VARCHAR2(60),
    CATEGORY VARCHAR2(60)
    );

    insert into PRODUCTS values (1501, '1', 'ELECTRNCS'); 
    insert into PRODUCTS values (1502, '1', 'ELECTRNCS');-- duplicate records
    insert into PRODUCTS values (1600, '1', 'TOYS');
    insert into PRODUCTS values (1601, '1', 'TOYS');--
    insert into PRODUCTS values (1666, '1', 'DVD');--
    commit;

    create table NEWPRODUCTS
    (
    PRODUCT_ID INTEGER,
    PRODUCT_NAME VARCHAR2(60),
    CATEGORY VARCHAR2(60)
    );

    insert into NEWPRODUCTS values (1502, '2', 'ELECTRNCS');--
    insert into NEWPRODUCTS values (1601, '2', 'TOYS');--
    insert into NEWPRODUCTS values (1666, '2', 'TOYS');--
    insert into NEWPRODUCTS values (1700, '2', 'BOOKS');
    commit;

delete from products ;
delete from newproducts ;

select * from products;
select * from newproducts;

select product_id from products minus select product_id from   newproducts;

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
  
  
  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);


MERGE INTO products p
using (select 1700 id from dual) t
ON (p.product_id = t.id)
WHEN NOT MATCHED THEN --
  INSERT VALUES (1700, '3', '3')
WHEN MATCHED THEN --
  UPDATE SET p.product_name = '4', p.category = '4'

 

你可能感兴趣的:(oracle)