CREATE OR REPLACE TRIGGER tr_check
BEFORE INSERT ON Shelf_Reading FOR EACH ROW WHEN(new.readpointID=004 or new.readpointID=005)
DECLARE
  v_eventID1 NUMBER;
  v_eventID2 NUMBER;
BEGIN
  SELECT max(eventID) INTO v_eventID1 from checkout;
  if v_eventID1 is null then
     v_eventID2:=1;
  else
     set v_eventID2:=v_eventID1+1;
  end if;
  INSERT INTO checkout VALUES(:v_eventID2,001,:new.readpointID,005,003,:new.epc,0.8,005,sysdate,sysdate);
  UPDATE Voc_epcobject
  SET statu='已售'
  WHERE ecp=new.epc;
END tr_check;
/
报的错
9/6      PL/SQL: SQL Statement ignored
9/10     PL/SQL: ORA-00922: 选项缺失或无效
11/31    PLS-00049: 错误的赋值变量 'V_EVENTID2'

解决方案 »

  1.   

    试试CREATE OR REPLACE TRIGGER tr_check
      BEFORE INSERT ON Shelf_Reading
      FOR EACH ROW
      WHEN (:new.readpointID = 004 or :new.readpointID = 005)
    DECLARE
      v_eventID1 NUMBER;
      v_eventID2 NUMBER;
    BEGIN
      SELECT max(eventID) INTO v_eventID1 from checkout;
      if v_eventID1 is null then
        v_eventID2 := 1;
      else
        set v_eventID2 := v_eventID1 + 1;
      end if;
      INSERT INTO checkout
      VALUES
        (v_eventID2,
         001,
         :new.readpointID,
         005,
         003,
         :new.epc,
         0.8,
         005,
         sysdate,
         sysdate);
      UPDATE Voc_epcobject SET statu = '已售' WHERE ecp = :new.epc;
    END tr_check;