2012-07-19 9 views
5

У меня есть эта функция:Oracle Merge. Как я могу использовать его?

 Procedure UpdateDefaultWeight (vYear Number, costWeight Number, qualityWeight Number, serviceWeight Number) 
     AS 

     type weight_table is table of Number(5,2) index by varchar2(50); 
     weightArray weight_table; 
     currentPosition varchar2(50); 
     Begin 

     weightArray('Cost Weighting') := costWeight; 
     weightArray('Quality Weighting') := qualityWeight; 
     weightArray('Service Weighting') := serviceWeight; 

     currentPosition := weightArray.first; 

     Loop 
      Exit When currentPosition is null; 
      Insert Into GVS.GVSSD16_DFLT_WEIGHT 
      (cal_year, metric_name, metric_val) 
      Values 
      (vYear, currentPosition, weightArray(currentPosition)); 

      currentPosition := weightArray.next(currentPosition); 
     End Loop; 
     END; 

Прямо сейчас, как я уже писал, он просто делает INSERT. Однако мне нужно это для UPSERT. Я просмотрел документацию по MERGE, но в основном я просто смутился тем, как применять синтаксис к конкретному случаю.

Я искал here и here, и я получаю его, но синтаксис не дает мне возможности.

Кто-нибудь хочет помочь новичкам Oracle?

ответ

6

Предполагая, что cal_year и METRIC_NAME определить критерии присоединиться, то это должно заставить вас закрыть (непроверенные):

MERGE INTO GVS.GVSSD16_DFLT_WEIGHT d 
    USING (SELECT vYear AS YY, 
        currentPosition AS POS, 
        weightArray (currentPosition) AS WA 
       FROM DUAL) v 
     ON (d.cal_year = v.YY AND d.metric_name = v.pos) 
WHEN MATCHED 
THEN 
    UPDATE SET metric_val = v.WA 
WHEN NOT MATCHED 
THEN 
    INSERT  (cal_year, metric_name, metric_val) 
     VALUES (v.YY, v.POS, v.WA); 
+3

Damn возле совершенен. Просто нужна скобка вокруг условия ON. Спасибо за помощь. – Corwin01

Смежные вопросы