2014-06-24 86 views
0

也许这很容易,但我没有领先。表B包含两个字段:product_no NUMBERproduct VARCHAR2。触发器应该做的是从BP-table插入相应的产品说明,其中您也有字段product_noproduct。 例如你在B.product_no中输入20,那么它应该从BP-Table自动输入正确的产品。 Oracle版本是11g。Oracle PL/SQL触发器:更新/插入其中的条件

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;/ 
+0

问题是什么? –

+0

它不起作用。错误消息:错误第51行,第12列,ending_line 51,ending_col 18,找到'varchar',期望:。 - 或 - ( - 或 - RETURN RETURNING - 或 - LOG - 或 - ; – Redfood

+0

为什么?我必须定义变量,否?当我继续这个触发器时,我得到另一个错误,触发器'无效且失败的重新验证“ – Redfood

回答

0

可以用户伪记录:新:老,使其工作:

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