2012-06-06 1 views
5

아래에 표시된 업데이트 구문이 잘 작동합니다. 하위 쿼리에서 with 문을 사용하여 성능을 크게 향상 시켰지만 어떤 이유로 인해 동일한 테이블에서 추가 열을 업데이트 할 수 없습니다.With 키워드를 사용하여 둘 이상의 열을 동시에 업데이트 할 수없는 이유는 무엇입니까?

작품 : 난 그냥이

UPDATE Table_A SET (Col_One, Col_Two) = (WITH OneValue AS (SELECT DISTINCT t.Col_One, T.Col_two 
                FROM Table_Two t, Table_A a 
                WHERE t.id = a.New_Id)) 
           SELECT Col_One, Col_Two FROM OneValue); 

처럼 table_two에서도 업데이트하는 또 다른 열을 포함하면된다 싶습니다하지만 난 ORA-01767 갱신 설정 표현해야 얻을 무엇

UPDATE Table_A SET (Col_One) = (WITH OneValue AS (SELECT DISTINCT t.Col_One 
                FROM Table_Two t, Table_A a 
                WHERE t.id = a.New_Id)) 
           SELECT Col_One FROM OneValue); 

부질의. 이 오류를 이해하지만 어떻게 생성하는지 보지 못합니다. 어떤 도움이라도 대단히 감사합니다.

미리 감사드립니다.

UPDATE Table_A SET (Col_One, Col_Two) = (select col_one, col_two from 
              (WITH OneValue AS (SELECT DISTINCT t.Col_One, T.Col_two 
                FROM Table_Two t, Table_A a 
                WHERE t.id = a.New_Id)) 
              SELECT Col_One, Col_Two FROM OneValue) 
             ); 

서브 쿼리는 "함께"로 시작하는 경우가 작동하지 않는 이유에 관해서는, 나는 단지 그것을 상상할 수

+1

성능에 하위 쿼리 인수 절이 도움이되는 이유는 없습니다. 차이점이 있는지 실행 계획을 확인하십시오. –

+0

코딩에 익숙하지 않은 나는 매우 큰 테이블 인 테이블 2의 성능에 문제가 있다고 말할 때를 제외하고 올바르게 대답 할 수 있을지 확신 할 수 없습니다. 나는 주위를 둘러 보았고 askTom [link] (http://asktom.oracle.com/pls/asktom/f?p=100:11:0:::P11_QUESTION_ID:288016031632)을 통해 매우 유용한 업데이트 최적화 정보를 찾았습니다. 내 상황과 성능이 5 분 이상에서 10 초 미만으로 떨어졌습니다. – dee

+0

+1 asktom을 살펴보기 위해 +1하지만 거기에 노출 된 철학을 따르지 않으므로 -1. 그가 성능 비교를 어떻게하는지보십시오. DBMS_Xplan을 사용하여 쿼리에 대한 실행 계획을 얻고 차이점을 확인하고 데이터 캐싱의 이점을 누리는 두 번째 쿼리를 확인하십시오. –

답변

8

이것은 (어쨌든 DUAL를 사용하여 간단한 쿼리와 함께했던) 작업이 나타납니다 오라클 SQL의 설계자가이 사용법을 예상하지 않았기 때문입니다.

+0

이 해결 방법이 효과적입니다. 너무 빨리 답변 해 주셔서 감사합니다. 그것은 불필요하게 중복되는 것으로 나를 때린다. 그러나 이것에 관해서 새롭다. 나는 그것에 도움이 될 수 없다. 그러나 그것이 그것에 대한 논리적 인 이유가 있는지 궁금하게 생각한다. – dee

+0

위대한 답변을 주셔서 감사합니다! 나는이 같은 문제에 난처했고 꽤 좌절하기 시작했다. 왜 그것이 작동하는지 아직도 확실하지 않지만, 적어도 그렇습니다! :) –

관련 문제