加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Oracle Merge.我怎么用呢?

发布时间:2021-03-05 22:31:22 所属栏目:站长百科 来源:网络整理
导读:我有这个功能: 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 varchar

我有这个功能:

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新手吗?

解决方法

假设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_val)
       VALUES (v.YY,v.POS,v.WA);

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读