Oracle PL/SQL Trigger: update/insert with where condition



也许这很容易,但我没有做到。表B包含两个字段:product_no NUMBERproduct VARCHAR2。触发器应该做的是从BP-table中插入相应的产品描述,其中还有字段product_noproduct。例如,您在B.product_no中输入20,那么它应该会自动从BP-Table中输入正确的产品。Oracle版本11g

CREATE OR REPLACE TRIGGER A.trigger_on_B
AFTER INSERT OR UPDATE
ON A.B FOR EACH ROW
DECLARE
  varProduct varchar(20);
BEGIN
  SELECT bp.report_info 
    into varProduct
    from  bp, 
          B
   where bp.product_no = B.product_no;
   insert into B (product) values(varProduct) ;
exception 
  when others then NULL;
END;/

您可以使用伪记录:new,:old,使其工作:

CREATE OR REPLACE TRIGGER A.trigger_on_B
AFTER INSERT OR UPDATE
ON A.B FOR EACH ROW
DECLARE
  varProduct varchar(20);
BEGIN
  SELECT bp.report_info 
    into varProduct
    from  bp
   where bp.product_no = :new.product_no;
   insert into B (product) values(varProduct) ;
exception 
  when others then NULL;
END;
  • 去掉when others then NULL;行,这是不被占用的,你不能隐藏任何异常。
  • 摆脱你的触发器,这是很难维护代码的逻辑触发器。有关更多信息,请查看本文

最新更新