2016-12-20 2 views
0

FROM 키워드가 예상되는 곳에서 찾을 수 없다는 오류가 발생합니다. 아래 코드에서 잘못된 점을 알려주세요. 두 개의 내부 조인을 사용하여 업데이트하고 다른 뷰에서 select를 수행하려고합니다. 이것이 오라클에서 어떻게 성취 될 수 있는지 알려주십시오.두 개 이상의 내부 조인 오라클 및 계산 값이있는 업데이트 문도보기에서 선택하십시오.

update (Select asset.CRV_AMOUNT as ACRV, 
       cmd.CRV_PERCENT as CRVP, 
       (select CRV$ 
        from recapt.facility_rec_crv_V fac_v 
        where fac_v.fac_code = fac.code 
        AND fac_v.complex_code = fac.complex_code) CRV_TOTAL as CRVT 
      from recapt.asset asset 
       inner join recapt.facility_rec fac 
        on fac.code = asset.fac_rec_code and 
         fac.complex_code = asset.complex_code 
       inner join recapt.cost_model_detail cmd 
        on cmd.cost_model_id = fac.cost_model_id and 
         cmd.mf_division_id = asset.mf_division_id) t 
    SET t.ACRV = ((t.CRVP * t.CRVT)/100); 
+0

당신은 스칼라 서브 쿼리 (CRVT)로 이중 앨리어싱 (') CRV_TOTAL을 사용합니다. 게다가 이것은 업데이트 가능한보기가 아닙니다. –

+0

그래서 CRV_TOTAL 만 사용할 수 있습니까? –

+0

이제 키가 보존되지 않은 테이블에 매핑되는 열을 수정할 수 없습니다. –

답변

2

MERGE 문으로 전환 해보십시오. 코드 작성 및 이해가 훨씬 쉬울 것입니다. 나는 이것을 테스트 할 수는 없지만의 라인에 뭔가 :

merge into recapt.asset asset 
using (select fac.code, 
       fac.complex_code, 
       cmd.mf_division_id, 
       cmd.crv_percent as crvp, 
       (select crv$ 
       from recapt.facility_rec_crv_v fac_v 
       where fac_v.fac_code = fac.code 
        and fac_v.complex_code = fac.complex_code) as crvt 
     from recapt.facility_rec fac 
     inner join recapt.cost_model_detail cmd 
      on cmd.cost_model_id = fac.cost_model_id) t 
    on (asset.fac_rec_code = t.code and 
     asset.complex_code = t.complex_code and 
     asset.mf_division_id = t.mf_division_it) 
    when matched then 
    update set asset.acrv = (t.crvp * t.crvt)/100; 

당신이 테이블을 만들고 (테스트 데이터의 일부 소량의) 문을 삽입 내가 이것을 테스트 할 수 있습니다 및/또는 더 나은 제공 제공하는 경우 해결책.

+0

환상적인 우르신 –