我试图根据计算出的另一列来找到(最佳)更新表列的方法。 首先,我使用函数来计算“ BAS_CBR_EB_RWA”列的值,然后使用“ BAS_CBR_EB_RWA”值作为“ BAS_CBR_EB_TOTAL_CAPITAL”列计算的输入,如下面的代码所示。
能否请您分享如何重用它来进行下一次计算。用右手计算替换'BAS_CBR_EB_RWA'是不可取的,因为我们有太多这种类型的计算,这会使其他用户感到困惑。
预先感谢您的帮助。
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;
答案 0 :(得分:2)
在Oracle中,您可以更新子查询。我不确定100%是否适用于UDF,但是您可以尝试:
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;
答案 1 :(得分:2)
可以使用ROWID
语句。您也可以将USING()
替换为表的主键或唯一键。
在函数SET
内放置所有第一级计算,并在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) );
表达式中输入RHS的第二级计算
{{1}}