oracle 实例用法,Oracle merge into用法以及相关例子示例
以下的文章主要是對Oracle merge into用法以及相關例子的介紹,首先我們以Oracle 9I中加入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;
創建測試數據表:
create?table?tj_test(id?number,name?varchar2(20),age?number);
向表中插入數據:
insert?into?tj_test?values?(1,'jan',23);
insert?into?tj_test?values?(2,'kk',22);
insert?into?tj_test?values?(3,'joe',27);
select?*?from?tj_test;
查詢結果如下:
1 jan 23
2 kk 22
3 joe 27
創建另一新表
create?table?tj_test1?as?select?*?from?tj_test?where1=0
插入一條數據
insert?into?tj_test1?values?(1,'jlk',23);
select?*?from?tj_test1
查詢結果如下:
1 jkl 23 --注意,這里的的NAME字段中的值是jkl
Oracle merge into用法使用MERGE,實現有則更新,無則插入,sql語句如下:
merge?into?tj_test1?tt1
using?tj_test?tt
on?(tttt1.id=tt.id)
when?matched?then
update?set
tttt1.name=tt.name,
tttt1.age=tt.age
when?not?matched?then
insert?values(
tt.id,
tt.name,
tt.age)
查詢tj_test1表(對比原來表中的數據,更新了ID=1 ROW中字段NAME,同時多出兩條新數據)
select?*?from?tj_test1
改變行數據如下:
1 jan 23 --這里的原有jkl值被更新
3 joe 27 --原來表中沒有的插入
2 kk 22 --原來表中沒有的插入
如果存在就更新,不存在就插入
9i已經支持了,是Merge,但是只支持select子查詢,
如果是單條數據記錄,可以寫作select …… from dual的子查詢。
語法為:
MERGE?INTO?table
USING?data_source
ON?(condition)
WHEN?MATCHED?THEN?update_clause
WHEN?NOT?MATCHED?THEN?insert_clause;
如:
MERGE?INTO?course?c
USING?(SELECT?course_name,?period,
course_hours
FROM?course_updates)?cu
ON?(c.course_name=cu.course_name
ANDc.period=cu.period)
WHEN?MATCHED?THEN
UPDATE
SETc.course_hours=cu.course_hours
WHEN?NOT?MATCHED?THEN
INSERT?(c.course_name,?c.period,
c.course_hours)
VALUES?(cu.course_name,?cu.period,
cu.course_hours);
以上的相關內容就是對Oracle merge into用法及例子的介紹,望你能有所收獲。
【編輯推薦】
【責任編輯:孫巧華 TEL:(010)68476606】
點贊 0
總結
以上是生活随笔為你收集整理的oracle 实例用法,Oracle merge into用法以及相关例子示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java if经典程序_java经典程序
- 下一篇: python3自动化软件发布系统_基于p