oracle apex触发器,导入sql文件时,Oracle APEX不会创建触发器

我有一个从 Oracle Express 导出的SQL文件(很可能是Navicat Lite),并且有创建触发器的查询 .

但是在使用APEX( SQL Workshop - > SQL Script )导入文件后,触发器未成功创建,没有错误 .

查询是这样的,它们肯定是有效的,当我用 SQL Command 手动运行这些查询时,我可以成功创建触发器 .

创建或替换TRIGGER“RESENV” . “AREA_ID_AUTOINCREMENT”在插入“RESENV”之前 . “区域”将旧的“旧”称为“新”为每个行(new.id为空)开始选择area_id_seq.nextval为:来自双重的new.id;结束;;

-- ----------------------------

-- Checks structure for table "RESENV"."AREA"

-- ----------------------------

ALTER TABLE "RESENV"."AREA" ADD CHECK ("ID" IS NOT NULL);

ALTER TABLE "RESENV"."AREA" ADD CHECK ("NAME" IS NOT NULL);

-- ----------------------------

-- Checks structure for table "RESENV"."DATASET"

-- ----------------------------

ALTER TABLE "RESENV"."DATASET" ADD CHECK ("SYSTEM_ID" IS NOT NULL);

ALTER TABLE "RESENV"."DATASET" ADD CHECK ("AREA_ID" IS NOT NULL);

ALTER TABLE "RESENV"."DATASET" ADD CHECK ("TABLE_NAME" IS NOT NULL);

ALTER TABLE "RESENV"."DATASET" ADD CHECK ("CREATED" IS NOT NULL);

-- ----------------------------

-- Triggers structure for table "RESENV"."IDX"

-- ----------------------------

CREATE OR REPLACE TRIGGER "RESENV"."IDX_ID_AUTOINCREMENT" BEFORE INSERT ON "RESENV"."IDX" REFERENCING OLD AS "OLD" NEW AS "NEW" FOR EACH ROW ENABLE WHEN (new.id is null)

begin

select idx_id_seq.nextval into :new.id from dual;

end;;

-- ----------------------------

-- Checks structure for table "RESENV"."IDX"

-- ----------------------------

ALTER TABLE "RESENV"."IDX" ADD CHECK ("ID" IS NOT NULL);

-- ----------------------------

-- Triggers structure for table "RESENV"."SYSTEM"

-- ----------------------------

CREATE OR REPLACE TRIGGER "RESENV"."SYSTEM_ID_AUTOINCREMENT" BEFORE INSERT ON "RESENV"."SYSTEM" REFERENCING OLD AS "OLD" NEW AS "NEW" FOR EACH ROW ENABLE WHEN (new.id is null)

begin

select SYSTEM_ID_SEQ.nextval into :new.id from dual;

end;;

-- ----------------------------

-- Checks structure for table "RESENV"."SYSTEM"

-- ----------------------------

ALTER TABLE "RESENV"."SYSTEM" ADD CHECK ("ID" IS NOT NULL);

ALTER TABLE "RESENV"."SYSTEM" ADD CHECK ("SYSTEM_CREATED" IS NOT NULL);

ALTER TABLE "RESENV"."SYSTEM" ADD CHECK ("SYSTEM_MODIFIED" IS NOT NULL);

ALTER TABLE "RESENV"."SYSTEM" ADD CHECK ("USER_ID" IS NOT NULL);

-- ----------------------------

-- Checks structure for table "RESENV"."UNIT"

-- ----------------------------

ALTER TABLE "RESENV"."UNIT" ADD CHECK ("ID" IS NOT NULL);

ALTER TABLE "RESENV"."UNIT" ADD CHECK ("NAME" IS NOT NULL);

ALTER TABLE "RESENV"."UNIT" ADD CHECK ("GD_ID" IS NOT NULL);

ALTER TABLE "RESENV"."UNIT" ADD CHECK ("AREA_ID" IS NOT NULL);

-- ----------------------------

-- Checks structure for table "RESENV"."USERS"

-- ----------------------------

ALTER TABLE "RESENV"."USERS" ADD CHECK ("ID" IS NOT NULL);

ALTER TABLE "RESENV"."USERS" ADD CHECK ("NAME" IS NOT NULL);

ALTER TABLE "RESENV"."USERS" ADD CHECK ("PASSWORD" IS NOT NULL);

-- ----------------------------

-- Checks structure for table "RESENV"."VLUE"

-- ----------------------------

ALTER TABLE "RESENV"."VLUE" ADD CHECK ("ID" IS NOT NULL);

ALTER TABLE "RESENV"."VLUE" ADD CHECK ("UNIT_ID" IS NOT NULL);

ALTER TABLE "RESENV"."VLUE" ADD CHECK ("IDX_ID" IS NOT NULL);

ALTER TABLE "RESENV"."VLUE" ADD CHECK ("IDX_VALUE" IS NOT NULL);

我尝试了很多次,结果相同 .

为什么会这样?这是APEX的错误吗?

更新

我在SQL文件的末尾显示了上面的这些行(在创建表和插入数据的行之前),但APEX将所有这些行视为ONE语句,并且只创建了一个代码如上所述的触发器(当然触发器的代码中有错误,但APEX在运行SQL脚本时没有提到 .

我尝试使用Navicat导入转储文件(使用 Execute SQL file 函数) . 错误列出,我认为应该没问题 .

更新2

事实证明我必须在每个 create trigger 语句的末尾添加斜杠 / ,否则每个脚本文件中只能创建一个触发器 . see this questin

但是触发器仍然存在上述语句和斜杠的错误 .

代码是:

create or replace TRIGGER "RESENV"."SYSTEM_ID_AUTOINCREMENT" BEFORE INSERT ON "RESENV"."SYSTEM" REFERENCING OLD AS "OLD" NEW AS "NEW" FOR EACH ROW WHEN (new.id is null)

begin

select SYSTEM_ID_SEQ.nextval into :new.id from dual;

end;;

错误是: Line 3 Position 5, PLS-00103: Encountered the symbol ";"

我不知道为什么navcat会像这样导出 .

更新

事实证明,双分号导致了这个问题 . 删除一个后,不再有任何错误 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值