"今天被一个奇怪的问题折腾了半天,navcat 中创建 oracle 触发器一直报错,ORA-24344:success with compilation error。但是在设计表中,直接修改触发器语句,却可以成功。 语句如下: CREATE OR REPLACE TRIGGER 'TIB_TEST' BEFORE IN .."

navicat 中创建 oracle 触发器提示 ORA-24344:success with compilation error

本贴最后更新于 563 天前,其中的信息可能已经时过境迁

今天被一个奇怪的问题折腾了半天,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;

执行,成功。

  • Navicat
    3 引用 • 4 回帖 • 1 关注
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    87 引用 • 109 回帖 • 658 关注
感谢    关注    收藏    赞同    反对    举报    分享
回帖    
请输入回帖内容...