Oracle merge 통합 업데이트 함수 인 스 턴 스 상세 설명
MERGE 문 구 는 UPDATE 와 INSERT 문 구 를 통합 하 는 오 라 클 9i 에 추 가 된 문법 이다.MERGE 문 구 를 통 해 한 장의 표 또는 여러 표 가 공동으로 조회 하 는 연결 조건 에 따라 다른 표를 조회 하고 연결 조건 이 일치 하 는 것 은 UPDATE 를 진행 하 며 일치 하지 않 는 INSERT 를 실행 합 니 다.이 문법 은 한 번 의 전체 표 스 캔 만으로 모든 작업 을 완 성 했 고 실행 효율 은 INSERT+UPDATE 보다 높 습 니 다.이 MERGE 를 통 해 하나의 SQL 구문 에서 하나의 표 에 대해 INSERT 와 UPDATE 작업 을 동시에 수행 할 수 있 습 니 다.
본 블 로 그 는 Oracle merge 합병 함수,업무 장면 을 소개 합 니 다.데 이 터 를 추가 할 때 데이터 베 이 스 를 수정 한 것 이 있 는 지 먼저 조회 하고 데이터 가 있 으 면 데 이 터 를 업데이트 하 며 데이터 가 없어 야 데 이 터 를 추가 합 니 다.이것 은 흔히 볼 수 있 는 업무 장면 입 니 다.Oracle 데이터 베 이 스 를 사용 하면 merge 함수 로 효율 이 빠 르 고 merge 함수 성능 도 상대 적 으로 좋 습 니 다.
merge 함수 의 문법:
MERGE INTO table_name alias1
USING (table|view|sub_query) alias2
ON (join condition)
WHEN MATCHED THEN
UPDATE table_name
SET col1 = col_val1,
col2 = col_val2
WHEN NOT MATCHED THEN
INSERT (column_list) VALUES (column_values);
예 를 들 어:SQL 은 데이터 가 있 으 면 업데이트 하고 데이터 가 없 으 면 새로 추가 한 다 는 뜻 이다.
MERGE INTO t_config_related A1 USING(select '97547758-6f85-419e-85f9-b8f711ca2660' seq,
'97547758-6f85-419e-85f9-b8f711ca2658' tipsSeq,
to_number('1') appLevel,
'24e1ccc38d9542189d1cc6c23f814a18' relaSeq from dual) A2
ON(A1.seq = A2.seq)
WHEN MATCHED THEN
UPDATE SET
A1.tips_seq = A2.tipsSeq,
A1.app_level = A2.appLevel,
A1.rela_seq = A2.relaSeq
WHEN NOT MATCHED THEN
INSERT(seq , tips_seq , app_level , rela_seq)
VALUES(A2.seq , A2.tipsSeq , A2.appLevel , A2.relaSeq);
/**
*
* @date 2019 2 21 11:17:10
* @return
*/
@RequestMapping("/batchSaveTipsAreaConfig")
@ResponseBody
public ResultModel batchSaveTipsConfig(ApprTipsRelatedModel relatedModel) {
List<ApprTipsRelatedModel> areaTipsList = new ArrayList<ApprTipsRelatedModel>();
//
String[] areaSeqs = StringUtils.split(relatedModel.getAreaSeq(),",");
for (String areaSeq : areaSeqs) {
ApprTipsRelatedModel areaRelatedModelNew = new ApprTipsRelatedModel();
areaRelatedModelNew.setSeq(commonService.generateUUID());
areaRelatedModelNew.setTipsSeq(relatedModel.getTipsSeq());
areaRelatedModelNew.setAppLevel(NumConstant.COMMON_NUM_TREE);
areaRelatedModelNew.setRelaSeq(areaSeq);
areaTipsList.add(areaRelatedModelNew);
}
//
try {
this.tipsConfigService.batchSaveTipsRelatedConfig(areaTipsList);
return ResultModel.success(" ");
} catch(Exception e) {
logger.error(" :{}"+e);
throw new SuperControllerException();
}
}
주의 요점:개발 중 에 이상 을 만 났 습 니 다.my batis 가 인쇄 한 SQL 은 다음 과 같 습 니 다.
Preparing: MERGE INTO appr_tips_config_related A1 ? USING( ? ? ? ? ? select ? seq , ? tipsSeq , ? appLevel , ? relaSeq from dual ? ? ? ? ) A2 ? ON( ? ? ? ? ?A1.seq = A2.seq ? ? ?) ? WHEN MATCHED THEN ? ? UPDATE SET A1.seq = A2.seq, A1.tips_seq = A2.tipsSeq, A1.app_level = A2.appLevel, A1.rela_seq = A2.relaSeq ? ? ?WHEN NOT MATCHED THEN ? ? ?INSERT(seq,tip_seq,app_level,rela_seq) ? ? ? ? VALUES(A2.seq , A2.tipsSeq , A2.appLevel , A2.relaSeq)
뭐 가 보 여요?인쇄 된 SQL 에는 많은 물음표 가 있 습 니 다.그것 은 SQL 에 빈 칸 이 있 기 때문에 merge 함 수 를 사용 하여 빈 칸 을 함부로 추가 하지 않 아 도 됩 니 다.그렇지 않 으 면 잘못 보고 할 수 있 습 니 다.
? USING( ? ? ? ? ? select ? seq , ? tipsSeq , ? appLevel , ? relaSeq from dual ? ? ? ? ) A2 ? ON( ? ? ? ? ?A1.seq = A2.seq ? ? ?) ?
총결산이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 작업 은 Clob 또는 NClob 데이터 형식의 저장 프로 세 스 인 스 턴 스 를 포함 합 니 다.텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.