首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在相同的代码块中重用更新中的计算列

在相同的代码块中重用更新中的计算列
EN

Stack Overflow用户
提问于 2019-06-07 05:08:57
回答 2查看 48关注 0票数 1

我正在尝试找到(最好的)方法来更新表的列,基于计算出的另一列。首先,我使用函数来计算'BAS_CBR_EB_RWA‘列的值,然后使用'BAS_CBR_EB_RWA’值作为'BAS_CBR_EB_TOTAL_CAPITAL‘列计算的输入,如下面提到的代码所示。

你能分享一下如何重用它来做下一步的计算吗?用右边的计算替换'BAS_CBR_EB_RWA‘是不可取的,因为我们有太多的这种类型的计算,这会让其他用户感到困惑。

提前感谢您的帮助。

代码语言:javascript
运行
复制
IF INSTTABLE = 16 THEN
  UPDATE LAO_DATA
    SET BAS_CBR_EB_RWA =  BAS2_RWA_CALC(BAS_CAPITAL_CALC_CD,
                                        CBR_CUR_BOOK_BAL,
                                        BAS_CAP_FACTOR_K,
                                        V_BASEL_MIN,
                                        V_BAS_RWA_RATE),
        BAS_CBR_EB_TOTAL_CAPITAL  = ROUND(BAS2_MGRL_CAPITAL(V_DATE, 
                                                            BAS_CBR_EB_RWA,
                                                            0),
                                          2),
    WHERE (AS_OF_DATE = V_DATE);

    --COMMIT;
END IF;
EN

回答 2

Stack Overflow用户

发布于 2019-06-07 06:14:13

在Oracle中,您可以更新子查询。我不能100%确定它是否适用于UDF,但您可以尝试:

代码语言:javascript
运行
复制
UPDATE (SELECT LD.*,
               BAS2_RWA_CALC(BAS_CAPITAL_CALC_CD, CBR_CUR_BOOK_BAL, BAS_CAP_FACTOR_K, V_BASEL_MIN, V_BAS_RWA_RATE) as new_BAS_CBR_EB_RWA
        FROM LAO_DATA LD
       )
    SET BAS_CBR_EB_RWA = new_BAS_CBR_EB_RWA,
        BAS_CBR_EB_TOTAL_CAPITAL = ROUND(BAS2_MGRL_CAPITAL(V_DATE, nw_BAS_CBR_EB_RWA, 0), 2),
WHERE AS_OF_DATE = V_DATE;
票数 2
EN

Stack Overflow用户

发布于 2019-06-07 11:12:14

可以使用MERGE语句。您还可以将ROWID替换为表的主键或唯一键。

将函数调用的所有第一级计算放在USING()块中,将RHS的第二级计算放在SET表达式中

代码语言:javascript
运行
复制
MERGE INTO lao_data t
USING (
           SELECT ROWID AS rid,bas2_rwa_calc(bas_capital_calc_cd,
                    cbr_cur_book_bal,
                    bas_cap_factor_k,
                    v_basel_min,v_bas_rwa_rate
           ) AS new_BAS_CBR_EB_RWA
           FROM lao_data
           WHERE as_of_date = V_DATE
      )
s ON ( s.rid = t.rowid )
WHEN MATCHED THEN UPDATE
SET t.bas_cbr_eb_rwa = s.new_BAS_CBR_EB_RWA 
    t.bas_cbr_eb_total_capital 
                     = round(bas2_mgrl_capital(v_date,s.nw_BAS_CBR_EB_RWA,0), 2) );
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56485122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档