MERGE語句,它可以在一個SQL語句中對一張表或一個視圖同時做更新或插入操作,避免了多個INSERT、UPDATE和DELETE語句。它可以從一個或多個數(shù)據(jù)源中選擇數(shù)據(jù)對目標表做更新或插入操作,你可以指定在何種條件下更新或插入目標表或視圖。不可以對同一行做多次更新操作。例如:實現(xiàn)用B表來更新A表數(shù)據(jù),如果A表中沒有,則把B表的數(shù)據(jù)插入A表。
成都創(chuàng)新互聯(lián)是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網站建設公司,自成立以來公司不斷探索創(chuàng)新,始終堅持為客戶提供滿意周到的服務,在本地打下了良好的口碑,在過去的十多年時間我們累計服務了上千家以及全國政企客戶,如食品包裝袋等企業(yè)單位,完善的項目管理流程,嚴格把控項目進度與質量監(jiān)控加上過硬的技術實力獲得客戶的一致稱贊。11gR2語法如下:
MERGE [ hint ] INTO [ schema. ] { table | view } [ t_alias ] USING { [ schema. ] { table | view } | subquery } [ t_alias ] ON ( condition ) [ merge_update_clause ] [ merge_insert_clause ] [ error_logging_clause ] ; #merge_update_clause WHEN MATCHED THEN UPDATE SET column = { expr | DEFAULT } [, column = { expr | DEFAULT } ]... [ where_clause ] [ DELETE where_clause ] #merge_insert_clause WHEN NOT MATCHED THEN INSERT [ (column [, column ]...) ] VALUES ({ expr | DEFAULT } [, { expr | DEFAULT } ]... ) [ where_clause ] #error_logging_clause LOG ERRORS [ INTO [schema.] table ] [ (simple_expression) ] [ REJECT LIMIT { integer | UNLIMITED } ]使用例子說明MERGE語句的作用:
創(chuàng)建測試表emp_m
scott@TEST>create table emp_m as select * from emp where comm is not null; Table created. scott@TEST>select * from emp_m; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ------------------------------ --------------------------- ---------- ------------------- ---------- ---------- ---------- 7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30 7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250 500 30 7654 MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250 1400 30 7844 TURNER SALESMAN 7698 1981-09-08 00:00:00 1500 0 30例子1:插入和更新操作
現(xiàn)在測試表emp_m中只有comm不為空的數(shù)據(jù),現(xiàn)在要把在emp表而不在emp_m表中的數(shù)據(jù)插入到emp_m表中,并把emp_m表中現(xiàn)有的數(shù)據(jù)的comm增加10。
scott@TEST>MERGE INTO EMP_M M 2 USING EMP N 3 ON (M.EMPNO = N.EMPNO) 4 WHEN NOT MATCHED THEN 5 INSERT 6 (M.EMPNO, M.ENAME, M.JOB, M.MGR, M.HIREDATE, M.SAL, M.COMM, M.DEPTNO) 7 VALUES 8 (N.EMPNO, N.ENAME, N.JOB, N.MGR, N.HIREDATE, N.SAL, N.COMM, N.DEPTNO) 9 WHEN MATCHED THEN 10 UPDATE SET M.COMM = M.COMM + 10; 14 rows merged. scott@TEST>select * from emp_m; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ------------------------------ --------------------------- ---------- ------------------- ---------- ---------- ---------- 7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 310 30 7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250 510 30 7654 MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250 1410 30 7844 TURNER SALESMAN 7698 1981-09-08 00:00:00 1500 10 30 7369 SMITH CLERK 7902 1980-12-17 00:00:00 800 20 7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975 20 7698 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850 30 7782 CLARK MANAGER 7839 1981-06-09 00:00:00 2450 10 7788 SCOTT ANALYST 7566 1987-04-19 00:00:00 3000 20 7839 KING PRESIDENT 1981-11-17 00:00:00 5000 10 7876 ADAMS CLERK 7788 1987-05-23 00:00:00 1100 20 7900 JAMES CLERK 7698 1981-12-03 00:00:00 950 30 7902 FORD ANALYST 7566 1981-12-03 00:00:00 3000 20 7934 MILLER CLERK 7782 1982-01-23 00:00:00 1300 10 14 rows selected.例子2:實現(xiàn)刪除操作
從emp_m表中刪除表emp中DEPTNO=30的記錄。
scott@TEST>MERGE INTO EMP_M M 2 USING (SELECT EMPNO FROM EMP WHERE DEPTNO = 30) N 3 ON (M.EMPNO = N.EMPNO) 4 WHEN MATCHED THEN 5 UPDATE SET M.COMM = DEFAULT 6 DELETE WHERE M.EMPNO = N.EMPNO; 6 rows merged. scott@TEST>select * from emp_m; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ------------------------------ --------------------------- ---------- ------------------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 1980-12-17 00:00:00 800 20 7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975 20 7782 CLARK MANAGER 7839 1981-06-09 00:00:00 2450 10 7788 SCOTT ANALYST 7566 1987-04-19 00:00:00 3000 20 7839 KING PRESIDENT 1981-11-17 00:00:00 5000 10 7876 ADAMS CLERK 7788 1987-05-23 00:00:00 1100 20 7902 FORD ANALYST 7566 1981-12-03 00:00:00 3000 20 7934 MILLER CLERK 7782 1982-01-23 00:00:00 1300 10使用注意事項:
不能指定一個在它上面定義了INSTEAD OF觸發(fā)器的視圖為目標視圖。
USING子名指定源數(shù)據(jù),可以是表、視圖或子查詢
UPDATE子句中的where條件可以指定目標表的條件也可以指定源表的條件
UPDATE子句中不能更新ON條件中的列,更新表時不能指定DEFAULT
UPDATE子句中指定DELETE WHERE用于刪除數(shù)據(jù)。
INSERT子句中,如果INSERT后省略列名,VALUES后的列的個數(shù)必須與目標表列個數(shù)一致
INSERT子句中,可以使用WHERE條件限制插入的數(shù)據(jù)
官方文檔:http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_9016.htm#SQLRF01606
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
分享標題:OracleMERGE語句-創(chuàng)新互聯(lián)
鏈接分享:http://jinyejixie.com/article6/eghog.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供網頁設計公司、網站內鏈、虛擬主機、面包屑導航、營銷型網站建設、品牌網站制作
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內容