oracle merge into 小例
阿新 • • 發佈:2021-08-12
今天除錯程式檢視日誌遇到如下日誌列印
Preparing: merge into ex_mistakes_tb a using (select ? user_no, ? quest_no from dual) b on (a.user_no = b.user_no and a.quest_no = b.quest_no) when matched then update set mistake_times = mistake_times + 1, last_modi_date = ? when not matched then insert (user_no, quest_no, mistake_type, mistake_times, is_open, last_modi_date) values(?, ?, ?, ?, ?, ?) Parameters: jc002(String), 20170719154904504111(String), 20210812100212(String), jc002(String), 20170719154904504111(String), 00(String), 1(Integer), 1(String), 20210812100212(String) Updates: 1
整理後的sql 是這樣的
merge into ex_mistakes_tb a using (select 'jc002' user_no, '20170719154908385290' quest_no from dual) b on (a.user_no = b.user_no and a.quest_no = b.quest_no) when matched then update set mistake_times = mistake_times + 1, last_modi_date = '20210812100211' when not matched theninsert (user_no, quest_no, mistake_type, mistake_times, is_open, last_modi_date) values ('jc002', '20170719154908385290', '00', 1, '1', '20210812100211')
這句sql的意思是說 , 查看錶中是否存在 user_no='jc002' 以及quest_no='20170719154904504111' 的記錄 , 如果有就更新這條記錄 , 如果沒有就新增記錄
這條語句出現的場景是"將一條記錄新增到錯題集 , 如果錯題集有了就更新一下出錯的次數 , 如果沒有就新增一條記錄"