create or replace trigger tr_book_
after insert
on book_ for each rowdeclare 
   tmp_category varchar2(20);
   tmp_smlcategory varchar2(20);
begin
      select category into tmp_category from book where isbn = :new.isbn;
      select smlcategory into tmp_smlcategory from book where isbn = :new.isbn;      if inserting then
         if tmp_category is not null
            insert into category_ values(:new.,tmp_category);         end if;
         if tmp_smlcategory is not null
            insert into small_category_ values(:new.,tmp_smlcategory);
         end if;
      end if;      if deleting then
         delete from category_ where category = tmp_category and  = :old.;
         delete from small_category_ where smlcategory = tmp_smlcategory and  = :old.;
      end if;
end;
本人初学oracle,不熟悉语法,请各位指教

解决方案 »

  1.   

    CREATE OR REPLACE TRIGGER tr_book_
      AFTER INSERT OR DELETE ON book_
      FOR EACH ROW
      --触发器体中有对deleting判断
      --所以加上or delete
    DECLARE
      tmp_category    VARCHAR2(20);
      tmp_smlcategory VARCHAR2(20);
    BEGIN
      --用一个语句就可以给两个变量赋值
      SELECT category, smlcategory
        INTO tmp_category, tmp_smlcategory
        FROM book
       WHERE isbn = :new.isbn;  IF inserting THEN
        IF tmp_category IS NOT NULL THEN --IF..THEN
          INSERT INTO category_ VALUES (:new., tmp_category);
        END IF;
        IF tmp_smlcategory IS NOT NULL THEN --IF..THEN
          INSERT INTO small_category_ VALUES (:new., tmp_smlcategory);
        END IF;
      END IF;  IF deleting THEN
        DELETE FROM category_
         WHERE category = tmp_category
           AND  = :old.;
        DELETE FROM small_category_
         WHERE smlcategory = tmp_smlcategory
           AND  = :old.;
      END IF;
    END;