집 >데이터 베이스 >MySQL 튜토리얼 >Oracle에서 UPDATE 문에 대해 상관 하위 쿼리를 사용할 때 무한 루프를 방지하는 방법은 무엇입니까?
Oracle에서 조인 쿼리를 사용한 업데이트: 상관 업데이트 처리
Oracle에서 상관 하위 쿼리를 사용하여 업데이트 쿼리를 수행하면 예기치 않은 동작이 발생할 수 있습니다. 또는 하위 쿼리가 단일 행을 반환하지 않으면 오류가 발생합니다. 다음 쿼리를 고려해 보세요.
UPDATE table1 t1 SET (t1.col, t1.Output) = ( SELECT t2.col, t3.Output + t2.col FROM tabl2 t3 LEFT JOIN table1 t2 ON t3.Join_Key = t2.Join_Key WHERE t2.col is not NULL);
문제:
제공된 쿼리는 table1의 각 행에 대해 여러 행을 반환할 수 있으므로 제공된 쿼리가 무기한 실행됩니다. 이 시나리오에서 Oracle은 table1의 각 행을 여러 번 업데이트하려고 시도하여 무한 루프가 발생합니다.
해결 방법:
이 문제를 해결하려면 다음이 필요합니다. 하위 쿼리가 업데이트되는 table1의 각 행에 대해 단일 행을 반환하는지 확인하세요. 한 가지 접근 방식은 table1의 행을 하위 쿼리의 행과 연결하는 조건을 추가하는 것입니다.
UPDATE table1 t1 SET (t1.col,t1.Output) = ( SELECT t2.col, t3.Output + t2.col FROM tabl2 t3 LEFT JOIN table1 t2 ON t3.Join_Key = t2.Join_Key WHERE t2.col is not NULL AND t1.some_key = t2.some_key);
이 수정된 쿼리에서 추가 조건 t1.some_key = t2.some_key는 일치하는 행만 일치하도록 보장합니다. 하위 쿼리에 포함되어 각 table1 행에 대해 단일 행이 생성됩니다.
또한 쿼리가 모든 항목을 업데이트할지 여부를 고려해 볼 가치가 있습니다. table1의 행 또는 그 중 일부만. 서브 쿼리 결과를 바탕으로 특정 행만 업데이트하는 것이 목표라면 UPDATE 절에 추가적인 필터링 기준을 추가할 수 있습니다.
위 내용은 Oracle에서 UPDATE 문에 대해 상관 하위 쿼리를 사용할 때 무한 루프를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!