程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> 關於Oracle數據庫 >> Oracle MERGE INTO的用法示例介紹

Oracle MERGE INTO的用法示例介紹

編輯:關於Oracle數據庫

     這篇文章主要介紹了Oracle MERGE INTO的用法,需要的朋友可以參考下

    很多時候我們會出現如下情境,如果一條數據在表中已經存在,對其做update,如果不存在,將新的數據插入.如果不使用Oracle提供的merge語法的話,可能先要上數據庫select查詢一下看是否存在,然後決定怎麼操作,這樣的話需要寫更多的代碼,同時性能也不好,要來回數據庫兩次.使用merge的話則可以一條SQL語句完成.

    1)主要功能

    提供有條件地更新和插入數據到數據庫表中

    如果該行存在,執行一個UPDATE操作,如果是一個新行,執行INSERT操作

    — 避免了分開更新

    — 提高性能並易於使用

    — 在數據倉庫應用中十分有用

    2)MERGE語句的語法如下:

    代碼如下:

    MERGE [hint] INTO [schema .] table [t_alias] USING [schema .]

    { table | view | subquery } [t_alias] ON ( condition )

    WHEN MATCHED THEN merge_update_clause

    WHEN NOT MATCHED THEN merge_insert_clause;

    3)示例

    代碼如下:

    MERGE INTO TABLE TARGET

    USING (SELECT '111111111' STORE_NO,

    '2014-01' TARGET_YM,

    '1' TARGET_D01,

    '2' TARGET_D02,

    '2' TARGET_D03,

    '2' TARGET_D04,

    '2' TARGET_D05,

    '2' TARGET_D06,

    '2' TARGET_D07,

    '2' TARGET_D08,

    '2' TARGET_D09,

    '2' TARGET_D10,

    '2' TARGET_D11,

    '2' TARGET_D12,

    '2' TARGET_D13,

    '2' TARGET_D14,

    '2' TARGET_D15,

    '2' TARGET_D16,

    '2' TARGET_D17,

    '2' TARGET_D18,

    '2' TARGET_D19,

    '2' TARGET_D20,

    '2' TARGET_D21,

    '2' TARGET_D22,

    '2' TARGET_D23,

    '2' TARGET_D24,

    '2' TARGET_D25,

    '2' TARGET_D26,

    '2' TARGET_D27,

    '2' TARGET_D28,

    '2' TARGET_D29,

    '2' TARGET_D30,

    '2' TARGET_D31,

    1 USER_ID

    FROM DUAL) TEMP

    ON (TARGET.STORE_NO = TEMP.STORE_NO AND TARGET.TARGET_YM = TEMP.TARGET_YM)

    WHEN MATCHED THEN

    UPDATE

    SET TARGET.TARGET_D01 = TEMP.TARGET_D01,

    TARGET.TARGET_D02 = TEMP.TARGET_D02,

    TARGET.TARGET_D03 = TEMP.TARGET_D03,

    TARGET.TARGET_D04 = TEMP.TARGET_D04,

    TARGET.TARGET_D05 = TEMP.TARGET_D05,

    TARGET.TARGET_D06 = TEMP.TARGET_D06,

    TARGET.TARGET_D07 = TEMP.TARGET_D07,

    TARGET.TARGET_D08 = TEMP.TARGET_D08,

    TARGET.TARGET_D09 = TEMP.TARGET_D09,

    TARGET.TARGET_D10 = TEMP.TARGET_D10,

    TARGET.TARGET_D11 = TEMP.TARGET_D11,

    TARGET.TARGET_D12 = TEMP.TARGET_D12,

    TARGET.TARGET_D13 = TEMP.TARGET_D13,

    TARGET.TARGET_D14 = TEMP.TARGET_D14,

    TARGET.TARGET_D15 = TEMP.TARGET_D15,

    TARGET.TARGET_D16 = TEMP.TARGET_D16,

    TARGET.TARGET_D17 = TEMP.TARGET_D17,

    TARGET.TARGET_D18 = TEMP.TARGET_D18,

    TARGET.TARGET_D19 = TEMP.TARGET_D19,

    TARGET.TARGET_D20 = TEMP.TARGET_D20,

    TARGET.TARGET_D21 = TEMP.TARGET_D21,

    TARGET.TARGET_D22 = TEMP.TARGET_D22,

    TARGET.TARGET_D23 = TEMP.TARGET_D23,

    TARGET.TARGET_D24 = TEMP.TARGET_D24,

    TARGET.TARGET_D25 = TEMP.TARGET_D25,

    TARGET.TARGET_D26 = TEMP.TARGET_D26,

    TARGET.TARGET_D27 = TEMP.TARGET_D27,

    TARGET.TARGET_D28 = TEMP.TARGET_D28,

    TARGET.TARGET_D29 = TEMP.TARGET_D29,

    TARGET.TARGET_D30 = TEMP.TARGET_D30,

    TARGET.TARGET_D31 = TEMP.TARGET_D31,

    TARGET.OPT_COUNTER = TARGET.OPT_COUNTER + 1,

    TARGET.UPDATE_BY = TEMP.USER_ID,

    TARGET.UPDATE_DATE = SYSDATE

    WHEN NOT MATCHED THEN

    INSERT

    VALUES

    (SEQ.NEXTVAL,

    TEMP.STORE_NO,

    TEMP.TARGET_YM,

    TEMP.TARGET_D01,

    TEMP.TARGET_D02,

    TEMP.TARGET_D03,

    TEMP.TARGET_D04,

    TEMP.TARGET_D05,

    TEMP.TARGET_D06,

    TEMP.TARGET_D07,

    TEMP.TARGET_D08,

    TEMP.TARGET_D09,

    TEMP.TARGET_D10,

    TEMP.TARGET_D11,

    TEMP.TARGET_D12,

    TEMP.TARGET_D13,

    TEMP.TARGET_D14,

    TEMP.TARGET_D15,

    TEMP.TARGET_D16,

    TEMP.TARGET_D17,

    TEMP.TARGET_D18,

    TEMP.TARGET_D19,

    TEMP.TARGET_D20,

    TEMP.TARGET_D21,

    TEMP.TARGET_D22,

    TEMP.TARGET_D23,

    TEMP.TARGET_D24,

    TEMP.TARGET_D25,

    TEMP.TARGET_D26,

    TEMP.TARGET_D27,

    TEMP.TARGET_D28,

    TEMP.TARGET_D29,

    TEMP.TARGET_D30,

    TEMP.TARGET_D31,

    NULL,

    DEFAULT,

    DEFAULT,

    NULL,

    TEMP.USER_ID,

    DEFAULT,

    NULL,

    NULL);

    小幫助:

    看到數據庫表這麼多字段是不是好煩,拷貝、寫都麻煩還容易出錯,可以如下操作:

    1、先查詢出表的所有字段

    復制代碼 代碼如下:

    SELECT COLUMN_ID,

    COLUMN_NAME,

    DATA_TYPE,

    DATA_LENGTH,

    DATA_PRECISION,

    DATA_SCALE,

    NULLABLE,

    DATA_DEFAULT

    FROM USER_TAB_COLUMNS

    WHERE TABLE_NAME = 'TABLE'

    ORDER BY COLUMN_ID

    2、將該表列名拷貝到Excel,使用函數CONCATENATE

    舉一反三啦,很多時候都可以用到的,整理自網絡

            :更多精彩文章請關注三聯編程教程欄目。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved