我想在售书登记后更新库存
CREATE TRIGGER Update_TextBooks
AFTER INSERT ON SalesRegister
FOR EACH ROW
 BEGIN 
  DECLARE nibsn varchar(13);
  SELECT Ibsn INTO :nibsn FROM TextBooks WHERE Ibsn=:new.Ibsn ;
  UPDATE TextBooks SET Qty=Qty-:new.Qty_of_sales WHERE Ibsn=nibsn;
 END;编译提示错误是
null pragma raise return select update while with
<an identifier> <a double-quoted delimited-identifier>
<a bind variable> << close current delete fetch lock insert
open rollback savepoint set sql execute commit forall merge
<a single-quoted SQL string> pipe
<an alternatively-quoted SQL string>不太懂啊  希望大家帮帮忙吧 ~~

解决方案 »

  1.   

    CREATE TRIGGER Update_TextBooks
    AFTER INSERT ON SalesRegister
    FOR EACH ROW
    BEGIN
      DECLARE nibsn varchar(13);
      SELECT Ibsn INTO nibsn FROM TextBooks WHERE Ibsn=:new.Ibsn ;
      UPDATE TextBooks SET Qty=Qty-:new.Qty_of_sales WHERE Ibsn=nibsn;
    END; 
      

  2.   


    SELECT Ibsn INTO nibsn FROM TextBooks WHERE Ibsn=:new.Ibsn ; 同意。
      

  3.   

    谢谢楼上两位,不过我不明白意思啊 那个select语句有问题么?我把它改成下面这样 创建成功了。
    CREATE TRIGGER Update_TextBooks
    AFTER INSERT ON SalesRegister
    FOR EACH ROW
     BEGIN
      UPDATE TextBooks SET Qty=Qty-:old.Qty_of_Sales;
     END;看来每次插入的时候不需要经过查询,因为对于插入的那一条记录来说它本就是唯一的,但是我还不明白一个问题是,update语句后不需要跟where子句么?
    我加上where Ibsn=:new.Ibsn以后报错了。
    它是不是自动会用主码来识别要更新的语句呢?还是对整个表的数据都进行了更新?刚开始学 很多问题不是很明白,希望高手指点迷津~~~
      

  4.   

    update后面当然是可以加where语句的,你加上where Ibsn=:new.Ibsn报的什么错叻。
      

  5.   

    2/4      PL/SQL: SQL Statement ignored
    2/57     PL/SQL: ORA-00904: "IBSN": invalid identifier
      

  6.   

    错误如下:
    2/4      PL/SQL: SQL Statement ignored
    2/57     PL/SQL: ORA-00904: "IBSN": invalid identifier
      

  7.   

    上面的问题解决了 是我不小心弄错了 
    isbn  ibsn  谢谢两位啦