Oracle MERGE INTO的用法示例介紹
來源:易賢網(wǎng) 閱讀:1260 次 日期:2014-09-16 15:40:34
溫馨提示:易賢網(wǎng)小編為您整理了“Oracle MERGE INTO的用法示例介紹”,方便廣大網(wǎng)友查閱!

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

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

1)主要功能

提供有條件地更新和插入數(shù)據(jù)到數(shù)據(jù)庫表中

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

— 避免了分開更新

— 提高性能并易于使用

— 在數(shù)據(jù)倉庫應(yīng)用中十分有用

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

小幫助:

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

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,使用函數(shù)CONCATENATE

更多信息請查看IT技術(shù)專欄

更多信息請查看數(shù)據(jù)庫
易賢網(wǎng)手機(jī)網(wǎng)站地址:Oracle MERGE INTO的用法示例介紹
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機(jī)號
  • 驗證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機(jī)站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報警專用圖標(biāo)