在插入触发器之后更新另一个列

时间:2018-12-17 04:15:24

标签: oracle

我有3张桌子:

PolicyCoverage (POLICYCOVERAGEID,CoverageID,POLICYID,POLICYCOVERENROLLDATE)

Coverage(CoverageID,COVERAGECODE,COVERAGEMONTHLYRATE)

Policy(POLICYID,POLICYENROLLMENT_DATE,POLICYEFFECTIVE_START_DATE,POLICYMONTHLYPREMIUM)

我面临的问题是创建after after触发器。当在表coverageID中插入PolicyCoverage时,应该用{{1}填充表Policy }。

我似乎无法读取插入的coverageID并将其转换为查询以获取 premium 值以更新Coverage的MonthlyPremium。

到目前为止,我的代码如下:

POLICYMONTHLYPREMIUM

1 个答案:

答案 0 :(得分:0)

您需要将触发代码修改为以下内容。

  1. 首先从覆盖率表中获取每月覆盖率。
  2. 使用变量更新策略范围。

    create or replace trigger popmonthlyprem
    after insert on policycoverage
    for each row
    DECLARE
        v_num_cov_mon_rate NUMBER := 0; 
    BEGIN
        SELECT c.COVERAGEMONTHLYRATE
          INTO v_num_cov_mon_rate
          FROM coverage c
         WHERE c.coverageID = :NEW.coverageID;
    
        UPDATE policy p
           SET p.policymonthlypremium = v_num_cov_mon_rate
         WHERE p.POLICYID = :NEW.POLICYID
    END;
    

*注意-如果COVERAGE表中没有您的策略覆盖范围条目,则触发器将失败。您将需要为此添加一些异常处理。