Oracle - 批量多行计算

时间:2016-11-28 16:56:54

标签: oracle plsql

我有类似的要求,如下所示

表名:Salary_detail(至少有10,00,000条记录)

  

薪水 - 数字

     

加息 - 号码

     

net_salary - > cal_netsal(工资,上调)

(cal_netsal是计算net_sal的函数)

  

total_sal ---> total_sal(工资,上调)

total_sal是一个函数

  

previous_sal - > previous_sal(工资,上调)

previous_sal是一个函数。

我需要计算net_salary,total_sal和previous_sal列

  

1.我需要计算一行中的所有三列

     

2.插回该表中的相应列。   什么是达到这个目标的最好方法?

请帮助

1 个答案:

答案 0 :(得分:1)

您可以使用已创建的功能轻松更新现有列。以下更新将处理表中的现有记录。

UPDATE salary_details 
  SET net_salary = cal_netsal (salary, hike)
     , total_sal = total_sal (salary, hike)
     , previous_sal = previous_sal (salary, hike) WHERE 1 = 1

如果在表中插入或更新了新记录,则可以创建一个插入前触发器,它将更新现有列,并且无需在每次创建触发器后手动执行此操作。触发器将处理DML操作发生在表上

CREATE OR REPLACE TRIGGER  sal_biu_trg
              BEFORE INSERT OR UPDATE ON salary_details
                 FOR EACH ROW
   BEGIN
      IF INSERTING OR UPDATING THEN
        :NEW.net_salary = cal_netsal (:NEW.salary,:NEW.hike);
        :NEW.total_sal = total_sal (:NEW.salary,:NEW.hike);
        :NEW.previous_sal = previous_sal (:NEW.salary,:NEW.hike);
     END IF;  
   EXCEPTION 
    WHEN OTHERS THEN 
       dbms_output.put_line(SQLERRM);  
   END;
/