programing

누가 MERGE 문이 오라클에서 실제로 무엇을 하는지 설명해 줄 수 있습니까?

closeapi 2023. 9. 8. 21:30
반응형

누가 MERGE 문이 오라클에서 실제로 무엇을 하는지 설명해 줄 수 있습니까?

나는 무엇이 무엇인지에 대한 명확한 설명을 찾고 있습니다.MERGEOracle의 statement는 실제로 그러합니다.

제가 원하는 것은 다음과 같습니다.

MERGE INTO (target_table) t
USING (source_view) s
   ON (join condition)
 WHEN MATCHED THEN UPDATE SET col1 = val1 [, ...]
 WHEN NOT MATCHED THEN INSERT (col1 [, ...]) VALUES ( val1 [, ...])
  • 어떤 종류의 조인이 행해지나요?풀 아우터 조인인 것 같은데 맞나요?
  • 에 관해서는WHEN MATCHEDpart: 로부터 행을 지정하면 어떻게 됩니까?t여러 행을 일치시킵니다.s?
  • 에 관해서는WHEN NOT MATCHEDpart I believe의 뜻은 "행에 서신이 없을 때" 입니다.내 말이 맞니?

감사해요.

어떤 종류의 조인이 행해지나요?풀 아우터 조인인 것 같은데 맞나요?

아니요, 일반적인 외부 접합입니다.쿼리는 대상 테이블에 원본 테이블에도 있는 행이 있을 때와 대상 테이블에 없는 레코드가 있을 때를 알아야 합니다.쿼리는 대상 테이블에는 있지만 원본 테이블에는 없는 행에 응답할 필요가 없으므로 외부 조인이 양방향으로 수행될 필요가 없습니다.

그러나 외부 조인이 없는 경우에는 외부 조인이 수행되지 않습니다.not matched(완벽하게 유효한) 절입니다.옵티마이저는 이 경우 내부 결합이 충분하다는 것을 알 수 있을 정도로 똑똑합니다.

WHEN MATCHED 파트 관련: t의 행이 s의 여러 행과 일치하면 어떻게 됩니까?

매치가 여러 개일 경우, 각 매치마다 업데이트가 수행됩니다.이것은 업데이트가 마지막에 오는 것이 커밋에 기록되는 것임을 의미합니다.순서를 지정할 방법이 없으므로 이 경우 업데이트의 소스는 (일치 항목 집합에서) 사실상 랜덤합니다.

@Vincent Malgrat가 지적했듯이, 이것은 틀렸습니다.일치하는 항목이 여러 개일 경우 Oracle에서 "ORA-40926: 소스 테이블의 안정적인 행 집합을 얻을 수 없습니다" 오류가 발생할 것으로 보입니다.

WHEN NOT MATCH 부분에 대해서는 "s의 행에 t가 대응되지 않을 때"를 의미한다고 생각합니다.내 말이 맞니?

그것이 맞아요.

여기 꽤 좋은 기사 http://www.oracle-developer.net/display.php?id=203

언급URL : https://stackoverflow.com/questions/4863960/could-somebody-explain-what-the-merge-statement-really-does-in-oracle

반응형