代码之家  ›  专栏  ›  技术社区  ›  LPK

SQL Oracle中的触发器错误[已关闭]

  •  2
  • LPK  · 技术社区  · 7 年前

    我有一个名为“test”的表,其中有两列:sktest和test2

    我想在表上的每个插入中增加SKTEST列,所以我创建了一个序列和一个触发器。

    但我的触发语句遇到了一个错误:

    CREATE OR REPLACE TRIGGER INCRSK
    BEFORE INSERT ON schema.test
    FOR EACH ROW
    BEGIN 
         :new.SKTEST := SK_SEQUENCES.NEXTVAL
    END
    /
    

    当我想从表测试中在列Test2中插入值时:

    INSERT ALL
    INTO schema.test (test2) values ('10')
    INTO schema.test (test2) values ('20')
    INTO schema.test (test2) values ('30')
    SELECT * FROM dual;
    

    我得到以下错误:

    ORA-04098:触发器“user.incrsk”无效,重新验证失败

    所以我用下面的句子检查了错误:

    SELECT * FROM user_errors WHERE type = 'TRIGGER' AND name = 'INCRSK'
    

    它显示了这一点:

    PLS-00103:遇到符号“end”时,应为以下之一:。(*/ETC)

    编辑

    感谢@马克西姆波洛诺夫!

    1 回复  |  直到 7 年前
        1
  •  0
  •   lolo    7 年前

    在触发器ddl中缺少两个“;”符号:

    CREATE OR REPLACE TRIGGER INCRSK
    BEFORE INSERT ON schema.test
    FOR EACH ROW
    BEGIN 
         :new.SKTEST := SK_SEQUENCES.NEXTVAL;
    END;
    /