我写了 这样一个触发器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
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
这个你放到BEGIN前面去试试!?
还可以给你调试调试。
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;
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;