2017-12-07 18 views
0

Oracle 11g으로 자동화를 개발 중입니다. 나는 다음과 같은 oracle 10g에 잘 작동 쿼리하지만이없는 11Oracle 10g에서 11g로 쿼리

update(
    select rirr.NUM_SERIE_ULT, 
      tri.T_USED_IMEI, 
      rirr.celular, 
      tri.MSISDN, 
      rirr.TRAFICO, 
      case when rirr.celular = tri.MSISDN then 'MISMO ABONADO' 
       when rirr.celular <> tri.MSISDN then 'OTRO ABONADO' 
       else 'SIN TRAFICO' 
      end as TRAFICO_ACTUALIZAR 
    from RENOVACIONES_INT_RENO_REPO rirr 
     left join TRAFICO_RENOVACION_INTERNA tri 
     on rirr.NUM_SERIE_ULT = tri.T_USED_IMEI 
    ) 
set TRAFICO = TRAFICO_ACTUALIZAR; 
+4

안녕하세요. "작동하지 않는 것"을 자세히 기재하십시오. – OldProgrammer

+1

OldProgrammer를 백업하려면 쿼리가 작동하지 않지만 자세한 정보를 제공해주십시오. 그것이 무엇인지 오류가 발생 했습니까? 당신이 그것을 기대하고 (그리고 아무런 오류도 없다) 업데이트를 실행하지만 업데이트하지 않습니까 ?? 더 제공하십시오. – MER

+0

이 쿼리를 실행하면 다음 오류가 나타납니다. "ORA-01779 : 키가 아닌 테이블에 매핑되는 열을 수정할 수 없습니다." 이 오류는 내가 Oracle 10g를 11g로 업그레이드 할 때 나타납니다. –

답변

1

오류 :

당신은 테이블 rirr (안 실제 테이블 이름에서 열 TRAFICO를 업데이트

하지만, 당신이 사용하는 별칭 쿼리에서). 이 테이블은 조인 조건 rirr.NUM_SERIE_ULT = tri.T_USED_IMEI의 테이블 tri에 조인됩니다.

rirr의 각 행에 대해 Oracle은 조인 조건이 충족되는 tri에서 고유 한 행을 찾아야합니다. 즉, 테이블 rirrNUM_SERIE_ULT 열에 중복이있을 수 있습니다. 표 triT_USED_IMEI 열은 고유해야합니다 (중복되어서는 안됨). 또한 Oracle에서 조인을 사용하는 UPDATE 문을 구현할 때 테이블 tri에 UNIQUE 인덱스 또는 UNIQUE 제약 조건이있는 열 (T_USED_IMEI)이 필요합니다. 오라클 10에서 UPDATE 문이 작동했다면 그러한 색인이나 제약 조건을 가지고있을 가능성이 큽니다.

이러한 인덱스 또는 제약 조건이 여전히 Oracle 11에 있습니까? 업그레이드 한 것이 전부라면 인덱스 나 제약 조건을 삭제/제거해서는 안됩니다.

업데이트의 SELECT 부질에 다른 칼럼의 선택 포인트가 무엇인가하지만

관련없는 관찰 ... 오류 메시지의 의미는 무엇입니까? 즉 : rirr.NUM_SERIE_ULT, tri.T_USED_IMEI, rirr.celular, tri.MSISDN. 처음 두 개는 조인 조건에 나타납니다. 다른 두 개는 TRAFICO_ACTUALIZAR의 정의에 나타납니다. 그렇다고해서 이 (가) 인 4 개의 열이 SELECT 목록에 별도로 표시되어야한다는 의미는 아닙니다.

+0

안녕하세요 Mathguy, 이전 진술은 오라클 10에서 잘 작동하지만 dba가 11 일에 많은 쿼리가 작동을 멈췄을 때 나는 잘 모릅니다. 문제를 이해하고 다른 컬럼은 신경 쓰지 않습니다. 한 테이블을 다른 테이블 (case 문)의 값으로 업데이트하려고합니다. 그러나이 momnet에서 나는이 쿼리를 수정하는 방법을 모른다. –