Elsif TRLTYPE= 'XR' THEN
   -->物资入库时,向修旧利废库存表插入数据 
   --先查询repair_stock表中有没有字段信息数据
   SELECT COUNT(*)
     INTO ROWSCOUNT
     FROM repair_stock
    WHERE sto_part = :NEW.TRL_PART
      AND sto_store = :NEW.TRL_STORE
   
   IF ROWSCOUNT = 0 THEN   INSERT INTO repair_stock(sto_part,sto_qty,sto_store,sto_upddate)
   VALUES
     (:NEW.TRL_TRANS, :NEW.TRL_QTY, :NEW.TRL_STORE,:NEW.TRL_DATE)
   
   ELSIF THEN
   UPDATE repair_stock
      SET sto_qty = sto_qty + :NEW.TRL_QTY
    WHERE sto_part = :NEW.TRL_PART
      AND sto_store = :NEW.TRL_STORE
   
   -- repair_binstock
   SELECT COUNT(*)
     INTO ROWSCOUNT
     FROM repair_stock
    WHERE sto_part = :NEW.TRL_PART
      AND sto_store = :NEW.TRL_STORE
   
   UPDATE repair_binstock SET bis_qty = bis_qty + :NEW.TRL_QTY WHERE bis_part 
   bis_bin bis_status
   
  SELECT COUNT(*)
    FROM STOPART
   WHERE sto_Part = :NEW.TRL_PART, STO_STORE = :NEW.TRL_STORE, STO_BIN=:NEW.TRL_BIN
  
   END IF;
END在上面已经申明   ROWSCOUNT NUMBER(24);--行数 
报错:
Compilation errors for TRIGGER BCIS.B5TRANSLINES_INSERTError: PL/SQL: ORA-00933: SQL 命令未正确结束
Line: 83
Text: INSERT INTO repair_stock(sto_part,sto_qty,sto_store,sto_upddate)Error: PL/SQL: SQL Statement ignored
Line: 77
Text: INTO ROWSCOUNTError: PLS-00103: 出现符号 "end-of-file"在需要下列之一时:
        if
Line: 115
 

解决方案 »

  1.   

    ......
    IF ROWSCOUNT = 0 THEN   INSERT INTO repair_stock(sto_part,sto_qty,sto_store,sto_upddate)
       VALUES
         (:NEW.TRL_TRANS, :NEW.TRL_QTY, :NEW.TRL_STORE,:NEW.TRL_DATE);   --加个分号后再试一下。
       
       ELSIF THEN
       UPDATE repair_stock
       ......
      

  2.   

    每条语句都要加上;还有你的最后一条select count(*) from 有误.应该是select into的方式.
      

  3.   

       SELECT COUNT(*)
         INTO ROWSCOUNT
         FROM repair_stock
        WHERE sto_part = :NEW.TRL_PART
          AND sto_store = :NEW.TRL_STORE;
       
       IF ROWSCOUNT = 0 THEN
       INSERT INTO repair_stock(sto_part,sto_qty,sto_store,sto_upddate)
       VALUES
         (:NEW.TRL_TRANS, :NEW.TRL_QTY, :NEW.TRL_STORE,:NEW.TRL_DATE);
       
       ELSIF THEN   UPDATE repair_stock
          SET sto_qty = sto_qty + :NEW.TRL_QTY
        WHERE sto_part = :NEW.TRL_PART
          AND sto_store = :NEW.TRL_STORE;
       
       -- repair_binstock
       SELECT COUNT(*)
         INTO ROWSCOUNT
         FROM repair_stock
        WHERE sto_part = :NEW.TRL_PART
          AND sto_store = :NEW.TRL_STORE;
       
       UPDATE repair_binstock SET bis_qty = bis_qty + :NEW.TRL_QTY WHERE bis_part=bis_part
        and bis_bin=bis_bin and bis_status=bis_status;
        
       END IF;
    END
    Compilation errors for TRIGGER BCIS.B5TRANSLINES_INSERTError: PLS-00103: 出现符号 "THEN"在需要下列之一时:
            ( - + case mod new not
              null <an identifier> <a double-quoted delimited-identifier>
              <a bind variable> avg count current exists max min prior sql
              stddev sum variance execute forall merge time timestamp
              interval date
              <a string literal with character set specification>
              <a number> <a single-quoted SQL string> pipe
           符号 "null" 被替换为 "THEN" 后继续。
    Line: 87
    Text: ELSIF THENError: PLS-00103: 出现符号 "end-of-file"在需要下列之一时:
            if
    Line: 104
    Text: END
    只有这两处错了.
      

  4.   

    ELSIF THEN --->ELSE 试试.
      

  5.   

    呵呵..自己找到了,小问题才看到    ELSIF TRLTYPE= 'x' THEN    中间没加类型.
      

  6.   

    Compilation errors for TRIGGER BCIS.B5TRANSLINES_INSERTError: PLS-00103: 出现符号 ";"在需要下列之一时:
            if
    Line: 104
    Text: END;这就是最后个错了.
      

  7.   

    /* 总共改了10个错误,有时间的时候看看基础书。然后你下面UPDATE中的WHERE BIS_PART BIS_BIN BIS_STATUS 到底要弄个什么操作出来?自己相应的改一下吧。
    UPDATE REPAIR_BINSTOCK 
                SET BIS_QTY = BIS_QTY + :NEW.TRL_QTY
              WHERE BIS_PART = BIS_BIN-BIS_STATUS;
    */
    ELSIF TRLTYPE= 'XR' THEN
       -->物资入库时,向修旧利废库存表插入数据 
       --先查询REPAIR_STOCK表中有没有字段信息数据
       SELECT COUNT(*)
         INTO ROWSCOUNT
         FROM REPAIR_STOCK
        WHERE STO_PART = :NEW.TRL_PART
          AND STO_STORE = :NEW.TRL_STORE;
       
           IF ROWSCOUNT = 0 THEN
        
             INSERT INTO REPAIR_STOCK(STO_PART,STO_QTY,STO_STORE,STO_UPDDATE)
             VALUES (:NEW.TRL_TRANS, :NEW.TRL_QTY, :NEW.TRL_STORE,:NEW.TRL_DATE);
           
           ELSIF THEN
             UPDATE REPAIR_STOCK
                SET STO_QTY = STO_QTY + :NEW.TRL_QTY
              WHERE STO_PART = :NEW.TRL_PART
                AND STO_STORE = :NEW.TRL_STORE;
             
             -- REPAIR_BINSTOCK
             SELECT COUNT(*)
               INTO ROWSCOUNT
               FROM REPAIR_STOCK
              WHERE STO_PART = :NEW.TRL_PART
                AND STO_STORE = :NEW.TRL_STORE;
             
             UPDATE REPAIR_BINSTOCK 
                SET BIS_QTY = BIS_QTY + :NEW.TRL_QTY
              WHERE BIS_PART = BIS_BIN-BIS_STATUS;
             
            SELECT COUNT(*)
              FROM STOPART
             WHERE STO_PART = :NEW.TRL_PART 
               AND STO_STORE = :NEW.TRL_STORE 
               AND STO_BIN = :NEW.TRL_BIN;
          
           END IF;
           
           COMMIT;
    END IF;
      

  8.   

       Elsif TRLTYPE= '1' THEN
       SELECT COUNT(*)
         INTO ROWSCOUNT
         FROM repair_stock
        WHERE sto_part = :NEW.TRL_PART
          AND sto_store = :NEW.TRL_STORE;
       
       IF ROWSCOUNT = 0 THEN
       INSERT INTO repair_stock(sto_part,sto_qty,sto_store,sto_upddate)
       VALUES
         (:NEW.TRL_TRANS, :NEW.TRL_QTY, :NEW.TRL_STORE,:NEW.TRL_DATE);
       
       ELSIF TRLTYPE= '2' THEN
       UPDATE repair_stock
          SET sto_qty = sto_qty + :NEW.TRL_QTY
        WHERE sto_part = :NEW.TRL_PART
          AND sto_store = :NEW.TRL_STORE;
          
       -- repair_binstock
       SELECT COUNT(*)
         INTO ROWSCOUNT
         FROM repair_stock
        WHERE sto_part = :NEW.TRL_PART
          AND sto_store = :NEW.TRL_STORE;
       
          UPDATE repair_binstock
          SET bis_qty = bis_qty + :NEW.TRL_QTY
        WHERE bis_part = :NEW.TRL_TRANS
          and bis_bin =:NEW.TRL_bin;
        
       END IF;
    END IF;其实我完整的是这样的,开始贴出来没看....现在就一个错:
    Compilation errors for TRIGGER BCIS.B5TRANSLINES_INSERTError: PLS-00103: 出现符号 "end-of-file"在需要下列之一时:
            begin case declare
              end exception exit for goto if loop mod 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
    Line: 106
    Text: END IF;
      

  9.   

    请把你全部的代码贴出来.估计你少了个 END;