我写了 这样一个触发器CREATE TRIGGER Update_ForPurchase
AFTER INSERT ON BooksNotes
FOR EACH ROW
 BEGIN
 DECLARE nisbn varchar(13);
 CURSOR cur IS
 SELECT Isbn INTO nisbn FROM TextBooks;
  OPEN cur;
  LOOP
  FETCH cur INTO nisbn;  
  IF nisbn=:new.Isbn THEN
   UPDATE ForPurchase SET Qty_for_purchase=Qty_for_purchase+:new.Qty_for_purchase;
  END IF;
  IF cur%NOTFOUND THEN
  INSERT INTO ForPurchase VALUES(:new.Isbn,:new.Qty_for_purchase);
  END IF;
  END LOOP;
    CLOSE cur; 
  END;但是编译出错 不知道错在哪里 请大家帮忙看看  是语法的问题么???7/4      PLS-00103: 出现符号 "FETCH"在需要下列之一时:
         constant exception
         <an identifier> <a double-quoted delimited-identifier> table
         LONG_ double ref char time timestamp interval date binary
         national character nchar15/5     PLS-00103: 出现符号 "CLOSE"在需要下列之一时:
         end not pragma final
         instantiable order overriding static member constructor map

解决方案 »

  1.   

    DECLARE nisbn varchar(13); 
    这个你放到BEGIN前面去试试!?
      

  2.   

    要是楼主给一个create table的ddl语句,
    还可以给你调试调试。
      

  3.   

    CREATE OR REPLACE TRIGGER Update_ForPurchase 
    AFTER INSERT ON BooksNotes 
    FOR EACH ROW  
    Declare
      nisbn varchar(13); 
      CURSOR cur IS SELECT Isbn INTO nisbn FROM TextBooks; 
    BEGIN 
      OPEN cur; 
      LOOP 
        FETCH cur INTO nisbn;  
        IF nisbn=:new.Isbn THEN 
          UPDATE ForPurchase SET Qty_for_purchase=Qty_for_purchase+:new.Qty_for_purchase; 
        END IF; 
        IF cur%NOTFOUND THEN 
          INSERT INTO ForPurchase VALUES(:new.Isbn,:new.Qty_for_purchase); 
        END IF; 
      END LOOP; 
      CLOSE cur; 
    END;
      

  4.   


    CREATE TRIGGER Update_ForPurchase 
    AFTER INSERT ON BooksNotes FOR EACH ROW 
    DECLARE nisbn varchar(13); 
    CURSOR cur IS 
    SELECT Isbn INTO nisbn FROM TextBooks; BEGIN 
      OPEN cur; 
      LOOP 
        FETCH cur INTO nisbn;  
        IF nisbn=:new.Isbn THEN 
          UPDATE ForPurchase SET Qty_for_purchase=Qty_for_purchase+:new.Qty_for_purchase; 
        END IF; 
        IF cur%NOTFOUND THEN 
          INSERT INTO ForPurchase VALUES(:new.Isbn,:new.Qty_for_purchase); 
        END IF; 
      END LOOP; 
      CLOSE cur; 
    END;