今天被一个奇怪的问题折腾了半天,navcat 中创建 oracle 触发器一直报错,ORA-24344:success with compilation error。但是在设计表中,直接修改触发器语句,却可以成功。
语句如下:
CREATE OR REPLACE TRIGGER "TIB_TEST" BEFORE INSERT ON "TEST" REFERENCING OLD AS "OLD" NEW AS "NEW" FOR EACH ROW ENABLE
DECLARE
INTEGRITY_ERROR EXCEPTION;
ERRNO INTEGER;
ERRMSG CHAR(200);
DUMMY INTEGER;
FOUND BOOLEAN;
BEGIN
IF :NEW.ID IS NULL THEN SELECT S_TEST.NEXTVAL INTO :NEW.ID FROM DUAL; END IF;
EXCEPTION
WHEN INTEGRITY_ERROR THEN
RAISE_APPLICATION_ERROR(ERRNO, ERRMSG);
END;
可以看到,就是个普通的触发器,也没什么复杂语句。
后来才知道,原来这是 navicat 的一个 bug,END IF 与 END 必须在同一行,不然执行不成功,真的是无言以对。
于是,改成下面的格式:
CREATE OR REPLACE TRIGGER "TIB_TEST" BEFORE INSERT ON "TEST" REFERENCING OLD AS "OLD" NEW AS "NEW" FOR EACH ROW ENABLE
DECLARE
INTEGRITY_ERROR EXCEPTION;
ERRNO INTEGER;
ERRMSG CHAR(200);
DUMMY INTEGER;
FOUND BOOLEAN;
BEGIN
IF :XXX; END IF; XXX; END;
执行,成功。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于