2015-01-12 6 views
0

(, CCY_TO_BASE_RATE = EXCHANGERATE.MID_RATE)을 업데이트 문에 추가하려고하면 다음 오류가 표시됩니다.Oracle의 다중 열 업데이트

ORA-06550: line 8, column 21: 
PL/SQL: ORA-00923: FROM keyword not found where expected 

ORA-06550: line 6, column 1: 
PL/SQL: SQL Statement ignored 

그러나 (, CCY_TO_BASE_RATE = EXCHANGERATE.MID_RATE)이 없으면 해당 문구가 유효합니다. 진술 내용이 유효하도록 내 코드를 수정하려면 어떻게해야합니까?

DECLARE 
    v_system_base_ccy NVARCHAR2(10); 
BEGIN 
    v_system_base_ccy := dbo.Fn_parameter('SYSTEMBASECCY'); 

    UPDATE tbl_dvcollateral A 
    SET coll_value_base = (SELECT coll_value * Nvl(EXCHANGERATE.mid_rate, 1), 
            ccy_to_base_rate = EXCHANGERATE.mid_rate 
           FROM (SELECT mid_rate, 
              from_ccy 
             FROM TABLE(
            dbo.Fn_exchangeratetable(:V_AS_OF_DATE, 
            NULL, 
            v_system_base_ccy)) 
            )EXCHANGERATE 
           WHERE A.ccy = EXCHANGERATE.from_ccy(+)), 
      last_updated_by = :V_LOGIN_ID, 
      last_updated_datetime = To_timestamp(To_char(systimestamp, 
               'YYYY-MM-DD HH24:MI:SS'), 
            'YYYY-MM-DD HH24:MI:SS') 
    WHERE as_of_date = :V_AS_OF_DATE 
      AND record_status_id = :V_AUTHORIZED; 
END; 
+0

질문을 편집하고 'TBL_DVCOLLATERAL'테이블의 전체 정의를 포함하십시오. DBO.FN_EXCHANGERATETABLE이 반환하는 것에 대한 설명도 포함하십시오. 감사. –

답변

1

난 당신이 무슨 일을하는지 잘못 해석 될 수 있지만 업데이트 문의 잘못된 측면에 목표 컬럼 것 같다 : 라인 8에서

UPDATE tbl_dvcollateral A 
SET (coll_value_base, ccy_to_base_rate) = 
         (SELECT coll_value * Nvl(EXCHANGERATE.mid_rate, 1), 
           EXCHANGERATE.mid_rate 
          FROM (SELECT mid_rate, 
... 
0

당신이

ccy_to_base_rate = EXCHANGERATE.mid_rate 
이를

을 선택 표현식으로 사용하십시오. 기술적으로 Oracle SQL이 허용하지 않는 부울입니다. 이 표현식을 삭제해야합니다. 당신이 공식화하려고 시도했는지 모르겠으므로 대체 할 필요가 무엇인지 말할 수 없습니다.