Oracle儲存過程merge into

2022-08-23 21:57:13 字數 1490 閱讀 8385

最近本人在做乙個後台新增資料功能時,用到了merge into函式,這裡把碰到的一些自己理解進行一下總結,有什麼不好的,不對的希望大家可以提出來。

merge into的形式:

merge into 表a using 表b on(a.a=b.b)

when matched then

更新資料

when not matched then

新增資料

該sql語句功能是:

判斷b表和a表是否滿足on中條件,如果滿足則用b表去更新a表,如果不滿足,則將b表資料插入a表但是有很多可選項,如下:

1.只update或者只insert

2.帶條件的update或帶條件的insert

3.全插入insert實現

4.帶delete的update

接下來我們進行測試一下:

1、首先新建3張表,a、b、c

create table a

(id number not null,

name nvarchar2(200) not null,

year number

);create table b

(id number not null,

aid number not null,

name nvarchar2(200) not null,

year number,

city nvarchar2(200)

);create table c

(id number not null,

name nvarchar2(200) not null,

city nvarchar2(200) not null

);commit;

2、我們往表中匯入資料:

insert into a values(1, 'yangmi', 25);

insert into a values(2, 'huge', 25);

insert into a values(3, 'hejiong',  25);

commit;

insert into b values(1, 2, 'arvin', 26, '廣東');

insert into b values(2, 4, 'tyler', 26, '廣西');

insert into b values(3, 3, 'alan', 40, '湖南');

commit;

3、然後我們使用merge into來更新資料

merge into a using (select aid, name, year from b) c on (id = c.aid)

when matched then

update set year = c.year

when not matched then

insert(id, name, year) values(c.aid, c.name, c.year);

commit;

Oracle儲存過程呼叫儲存過程

oracle儲存過程呼叫有返回結果集的儲存過程一般用光標的方式,宣告乙個游標,把結果集放到游標裡面,然後迴圈游標 declare newcs sys refcursor cs1 number cs2 number cstype table rowtype table列的個數和newcs返回的個數一樣...

ORACLE儲存過程

自定義函式開始 create or replace function fn wftemplateidget templatecategoryid number,organid number,templatemode number return number istemplateid number i...

Oracle 儲存過程

create or replace procedure p 有就替換,沒有就建立 iscursor c is select from emp for update begin for v emp in c loop if v emp.deptno 10 then update emp2 set sa...