小D 接触 ORACLE 不久 遇到一个有关触发器发面问题代码:CREATE OR REPLACE TRIGGER TS_TS002 BEFORE INSERT ON YHS.TS001
FOR EACH ROW
  DECLARE 
  VTIME NUMBER := TO_NUMBER(TO_CHAR(SYSDATE,'FMHH24'));
    WHEN(VTIME>18 AND VTIME<17 )
    BEGIN
    UPDATE YHS.TS002 SET NUMS=NUMS+1 WHERE TS002.ID2=:NEW.TB1;
    END TS_TS002;在OEM中错误:Line # = 3 Column # = 5 Error Text = PLS-00103: Encountered the symbol "WHEN" when expecting one of the following:   begin function package pragma procedure subtype type use
   <an identifier> <a double-quoted delimited-identifier> form
   current cursorLine # = 4 Column # = 5 Error Text = PLS-00103: Encountered the symbol "BEGIN" when expecting one of the following:   * & = - + ; < / > at in is mod remainder not rem
   <an exponent (**)> <> or != or ~= >= <= <> and or like
   between overlaps || multiset year DAY_ member SUBMULTISET_Line # = 7 Column # = 0 Error Text = PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:   end not pragma final instantiable order overriding static
   member constructor map小D 分数 不够 请大虾们谅解...

解决方案 »

  1.   

    是不是 
    VTIME NUMBER := TO_NUMBER(TO_CHAR(SYSDATE,'FMHH24'));
    这一句写错了
      

  2.   

    VTIME>18 AND VTIME<17  ??这里能行吗?
      

  3.   

    CREATE OR REPLACE TRIGGER TS_TS002 BEFORE INSERT ON YHS.TS001
    FOR EACH ROW
      DECLARE  
      VTIME NUMBER := TO_NUMBER(TO_CHAR(SYSDATE,'FMHH24'));
      BEGIN
       IF (VTIME BETWEEN 17 AND 18) 
       THEN  --WHEN(VTIME>18 AND VTIME<17 ) 你这样写肯定报错咯
       UPDATE YHS.TS002 SET NUMS=NUMS+1 WHERE TS002.ID2=:NEW.TB1;
       END IF;
      END TS_TS002;
      

  4.   


    VTIME>18 AND VTIME<17 限制条件冲突吧VTIME>17 AND VTIME<18 
      

  5.   

    这样啊...我 刚刚 自己 搞定了不过 吃了碗三鲜粉就 有高手 给出了答案CREATE OR REPLACE TRIGGER TS_TS002 BEFORE INSERT ON YHS.TS001
    FOR EACH ROW
      DECLARE 
      --VTIME NUMBER := TO_NUMBER(TO_CHAR(SYSDATE,'FMHH24'));
        --WHEN(VTIME>18)
        VTIME NUMBER;
        BEGIN
          SELECT TO_NUMBER(TO_CHAR(SYSDATE,'FMHH24')) INTO VTIME FROM DUAL;
          IF VTIME < 8 AND VTIME >17
            THEN UPDATE YHS.TS002 SET NUMS=NUMS+1 WHERE TS002.ID2=:NEW.TB1;
            END IF;
          END TS_TS002;我换 成IF  就 OK 了是不是 WHEN 没办法 用逻辑 关键字啊...
      

  6.   

    失误 ... VTIME>17 AND VTIME<18 -> VTIME>17 AND VTIME<8 用来做一个 特定 时间 段 禁止 添加 数据库的 触发器 ... 
      

  7.   


    while(VTIME < 8 AND VTIME >17) 
    THEN UPDATE YHS.TS002 SET NUMS=NUMS+1 WHERE TS002.ID2=:NEW.TB1;
      

  8.   

    CREATE OR REPLACE TRIGGER TS_TS002 BEFORE INSERT ON YHS.TS001
    FOR EACH ROW
      DECLARE 
        VTIME NUMBER;
        BEGIN
          SELECT TO_NUMBER(TO_CHAR(SYSDATE,'FMHH24')) INTO VTIME FROM DUAL;
          IF VTIME < 8 AND VTIME >17
            THEN UPDATE YHS.TS002 SET NUMS=NUMS+1 WHERE TS002.ID2=:NEW.TB1;
            --如果时间段不是8-17时就更新 操作记录到指定数据库
             --具体操作功能在此添加
            END IF;
        END TS_TS002;问题 已经解决 感谢 各位
    感谢 CSDN
    将 TEST 过的 代码 SHARE 出来 方便其他 需要的人....