我正在尝试找到(最好的)方法来更新表的列,基于计算出的另一列。首先,我使用函数来计算'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;
发布于 2019-06-07 06:14:13
在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;
发布于 2019-06-07 11:12:14
可以使用MERGE
语句。您还可以将ROWID
替换为表的主键或唯一键。
将函数调用的所有第一级计算放在USING()
块中,将RHS的第二级计算放在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) );
https://stackoverflow.com/questions/56485122
复制相似问题