Oracle에서는 "병합"을 사용하여 테이블의 데이터를 다른 테이블에 삽입할 수 있습니다. 데이터가 삽입된 테이블에 이미 있으면 해당 데이터가 업데이트됩니다. 데이터가 삽입된 테이블에 새 데이터가 추가됩니다.
이 튜토리얼의 운영 환경: Windows 10 시스템, Oracle 11g 버전, Dell G3 컴퓨터.
Oracle9g는 하나의 SQL 문에서 테이블에 대한 삽입 및 업데이트 작업을 동시에 수행할 수 있습니다. MERGE 명령은 하나 이상의 데이터 소스에서 행을 선택합니다. 하나 이상의 테이블에 삽입합니다. Oracle 10g에서는 MERGE에 다음과 같은 개선 사항이 있습니다.
1. UPDATE 또는 INSERT 절은 선택 사항입니다.
2 UPDATE 및 INSERT 절은 WHERE 절을 사용하여 추가할 수 있습니다.
3. ON 조건에서는 모든 행을 대상 테이블에 삽입하는 데 사용됩니다. 4. UPDATE 절 뒤에 DELETE 절을 추가할 수 있습니다. 5. 소스 테이블은 using 키워드가 뒤에 오는 테이블이고, 대상 테이블은 병합될 테이블입니다. 6. 병합 대상 테이블에서 모든 업데이트, 삽입 및 삭제가 수행됩니다. 병합은 이미 작업을 위한 테이블을 공식화했기 때문에 업데이트, 삽입 및 삭제에서는 테이블 이름을 표시할 필요가 없습니다7. 즉, 병합 기능은 테이블 B와 새 테이블 A를 사용하는 문제를 해결하는 것입니다. 테이블 A에 데이터가 없으면 테이블 B의 데이터를 테이블 A에 삽입하거나 테이블에 이미 데이터가 있으면 업데이트하고, 그렇지 않으면 새 데이터를 추가합니다.구문:
MERGE INTO [your table-name] [rename your table here] USING ( [write your query here] )[rename your query-sql and using just like a table] ON ([conditional expression here] AND [...]...) WHEN MATHED THEN [here you can execute some update sql or something else ] WHEN NOT MATHED THEN [execute something else here ! ]
다음으로 직접 테스트해 보겠습니다.
요구 사항 1: 테이블에 데이터가 이미 있으면 업데이트합니다. 그렇지 않으면 추가합니다.
먼저 TEST_ONE 테이블을 만듭니다.
create table TEST_ONE( ID NUMBER not null primary key, NAME VARCHAR2(255), IP VARCHAR2(255), MEMO VARCHAR2(255))commit;테스트 데이터로 몇 가지 데이터만 추가하면 됩니다
INSERT INTO TEST_ONE (ID, NAME, IP, MEMO) VALUES (1, '2', '3', '周文军'); INSERT INTO TEST_ONE (ID, NAME, IP, MEMO) VALUES (2, '66', '366', '2656'); INSERT INTO TEST_ONE (ID, NAME, IP, MEMO) VALUES (3, '5656', '626', '2626'); INSERT INTO TEST_ONE (ID, NAME, IP, MEMO) VALUES (4, '5656', '2626', '626');자, 아래와 같이 데이터 테이블이 구축되었습니다.
새로운 데이터를 추가해야 할 경우 일반적으로 다음과 같이 합니다
INSERT INTO TEST_ONE (ID, NAME, IP, MEMO) VALUES (5, 'mrhu', '127.0.0.1.0', '王先生的IP');
하지만 먼저 ID를 사용하고 싶습니다. 새로운 데이터는 없지만 데이터가 업데이트되는 것으로 판단하세요. 이를 달성하는 방법은 무엇입니까?
그러면 병합 명령이 여기에 있습니다. 코드를 입력하세요:
merge into TEST_ONE mtb using (select '5' as id, 'mrhu' as name,'127.0.0.1.0' as ip,'王先生的IP' as memo from dual)mmb on (mtb.id = mmb.id)when matched THENupdate set mtb.name = mmb.name,mtb.ip = mmb.ip,mtb.memo=mmb.memo when not matched theninsert (mtb.id, mtb.name,mtb.ip,mtb.memo) VALUES(mmb.id,mmb.name,mmb.ip,mmb.memo);다음과 같이 실행하세요:
테이블의 데이터를 살펴보겠습니다:
데이터가 성공적으로 추가되었습니다!
그럼 업데이트를 어떻게 테스트하나요? 매우 간단합니다. memo='Mr. Wang's IP' to memo='This beautiful girl's IP' for test
merge into TEST_ONE mtb using (select '5' as id, 'mrhu' as name,'127.0.0.1.0' as ip,'本大美女的IP' as memo from dual)mmb on (mtb.id = mmb.id)when matched THENupdate set mtb.name = mmb.name,mtb.ip = mmb.ip,mtb.memo=mmb.memo when not matched theninsert (mtb.id, mtb.name,mtb.ip,mtb.memo) VALUES(mmb.id,mmb.name,mmb.ip,mmb.memo);
데이터가 성공적으로 업데이트되었습니다!
요구사항 2: 테이블 A의 데이터를 테이블 B에 추가합니다. 기본 키로 판단해야 합니다. 데이터가 포함되어 있으면 업데이트하세요.
테이블 B로 TEST_TWO를 또 생성하고 TEST_ONE을 추가합니다. 테이블 A.
create table tes( ID NUMBER not null primary key, CODE VARCHAR2(255), MEMO VARCHAR2(255));commit;
INSERT INTO ROOT.TEST_TWO (ID, CODE, MEMO) VALUES (5, 'mrhu', '隔壁老王的IP');
merge into TEST_TWO mtb using (select id,name,ip,memo from TEST_ONE) mmb on (mtb.id = mmb.id)when matched THENUPDATE set mtb.code = mmb.name,mtb.memo = mmb.memo when not matched THENinsert (mtb.id,mtb.code,mtb.memo) values (mmb.id,mmb.name,mmb.memo);효과를 살펴보겠습니다.
실행 결과가 예상한 결과와 일치합니다. 좋아요, 병합 사용법을 배웠나요? 그것!
Oracle Video Tutorial
"위 내용은 오라클에서 병합의 사용법은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!