Oracle PL / SQL触发器:使用where condition更新/插入

时间:2014-06-24 12:58:06

标签: sql oracle oracle11g

也许这很容易,但我没有取得成功。表格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;/

1 个答案:

答案 0 :(得分:0)

您可以使用伪记录: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;这条未被占用的行,你无法隐藏任何例外情况。
  • 摆脱触发器,很难用触发器中的逻辑维护代码。有关详细信息,请查看this article