You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle触发器实现先删后插报PLS-00103错误如何解决

问题原因

你的触发器报错是因为代码中加入了多余的IF、THEN语法结构。PL/SQL语法要求IF关键字后必须跟布尔判断表达式,你直接在IF后编写DELETE语句,不符合语法规则,因此抛出PLS-00103错误。

修改方案

你的业务逻辑不需要对删除操作的结果做判断,只要按顺序先执行删除、再执行插入即可,直接删除多余的IF和对应的THEN关键字就可以正常运行。

修改后的完整触发器代码如下:

create or replace TRIGGER APP_WFM.TRG_INS_NE_SF_SITE_INSTANCE
  BEFORE INSERT OR UPDATE ON SF_NE_DETAILS 
  FOR EACH ROW
BEGIN
  -- 先执行符合条件的删除操作
  DELETE FROM NE_SITE_INSTANCE
  WHERE build_by IN ('RCOM','RJIL','IP1','IP1 COLO')
  AND validation_status IS NULL
  AND wfm_hoto_flag IS NULL;

  -- 再插入新行数据
  INSERT INTO NE_SITE_INSTANCE ( 
    rf_siteid,
    sap_id,
    sitename,
    DSUPPLIERBATTERYBANK,
    DUTILITYINSTBATTERYBANK,
    DENDDGDATE,
    DSTARTDGDATE,
    DEMFEND,
    DEMFSTART,
    DQUALITYDATE,
    DRFE1OFFERED,
    DUTILITYINSTODC,
    DSUPPLIERSMPS,
    DUTILITYINSTSMPS,
    DLTOWERPOLEMATERIAL,
    DLNOOFPLATFORM,
    DLNOOFPOLES,
    DLNOOFSECTORS,
    DLBATREDIFIER,
    DLNOOFREDINSMPS,
    FUBATCOMMREPORT,
    FUDGCOMREPORT,
    FUSMPSCOMREPORT,
    DLSHELTER,
    CANDIDATEID,
    CIRCLE,
    CITY_NAME,
    LATITUDE,
    LONGITUDE,
    DLMATERIALSUPPLIER,
    DLBATMODELNAME,
    DBATRECTIFIERSRNO1,
    DBATRECTIFIERSRNO2,
    DBATRECTIFIERSRNO3,
    DBATRECTIFIERSRNO4,
    DBATRECTIFIERSRNO5,
    DBATRECTIFIERSRNO6,
    DCBMS,
    DDGALTERNATEMAKE,
    DGALTERNATESRNO,
    DCRANKMAKE,
    DCRANKSRNO,
    DDCENGINEMAKE,
    DDGENGINESRNO,
    DLDGMODELNAME,
    DLEARTHING,
    DLRP1MODELNAME,
    DCENERGYMETEROWNSRNO,
    DLMODELFDPFDMS1_COUNT,
    DLMODELFDPFDMS1,
    DFDPMAKE,
    DLMODELFDPFDMS_COUNT,
    DLMODELFDPFDMS,
    DODCMAKE,
    DLDOCMODELNAME,
    ODCSERIALNO,
    DLGO,
    DSHELTERMAKE,
    DSHELTERSRNO,
    DCONTROLLERADDRESS,
    DSMPSMAKE,
    DLMODELSMPS,
    DPAUIPADDRESS,
    DSMPSRECTIFIERSRNO1,
    DSMPSRECTIFIERSRNO2,
    DSMPSRECTIFIERSRNO3,
    DSMPSRECTIFIERSRNO4,
    DSMPSRECTIFIERSRNO5,
    DSMPSRECTIFIERSRNO6,
    DSMPSSRNO,
    DLLTOWERTYPE,
    DSUPPLIERFDMS,
    DRFE1DECLARED,
    SITE_TYPE,
    DSMPSRECTIFIERSRNO7,
    DSMPSRECTIFIERSRNO8,
    DSMPSRECTIFIERSRNO9,
    DSMPSRECTIFIERSRNO10,
    DSMPSRECTIFIERSRNO11,
    DSMPSRECTIFIERSRNO12,
    ALARM_GATEWAY_MAKE,
    ALARM_GATEWAY_MODEL_NAME,
    ALRM_GTWAY_INTS_DT,
    ALRM_GTWAY_SR_NO,
    ALRM_GTWAY_COMM_DT
  ) VALUES (
    :NEW.rf_siteid,
    :NEW.sap_id,
    :NEW.site_name,
    :NEW.DSUPPLIERBATTERYBANK,
    :NEW.DUTILITYINSTBATTERYBANK,
    :NEW.DENDDGDATE,
    :NEW.DSTARTDGDATE,
    :NEW.DEMFEND,
    :NEW.DEMFSTART,
    :NEW.DQUALITYDATE,
    :NEW.DRFE1OFFERED,
    :NEW.DUTILITYINSTODC,
    :NEW.DSUPPLIERSMPS,
    :NEW.DUTILITYINSTSMPS,
    :NEW.DLTOWERPOLEMATERIAL,
    :NEW.DLNOOFPLATFORM,
    :NEW.DLNOOFPOLES,
    :NEW.DLNOOFSECTORS,
    :NEW.DLBATREDIFIER,
    :NEW.DLNOOFREDINSMPS,
    :NEW.FUBATCOMMREPORT,
    :NEW.FUDGCOMREPORT,
    :NEW.FUSMPSCOMREPORT,
    :NEW.DLSHELTER,
    :NEW.CANDIDATEID,
    :NEW.CIRCLE,
    :NEW.CITY_NAME,
    :NEW.LATITUDE,
    :NEW.LONGITUDE,
    :NEW.DLMATERIALSUPPLIER,
    :NEW.DLBATMODELNAME,
    :NEW.DBATRECTIFIERSRNO1,
    :NEW.DBATRECTIFIERSRNO2,
    :NEW.DBATRECTIFIERSRNO3,
    :NEW.DBATRECTIFIERSRNO4,
    :NEW.DBATRECTIFIERSRNO5,
    :NEW.DBATRECTIFIERSRNO6,
    :NEW.DCBMS,
    :NEW.DDGALTERNATEMAKE,
    :NEW.DGALTERNATESRNO,
    :NEW.DCRANKMAKE,
    :NEW.DCRANKSRNO,
    :NEW.DDCENGINEMAKE,
    :NEW.DDGENGINESRNO,
    :NEW.DLDGMODELNAME,
    :NEW.DLEARTHING,
    :NEW.DLRP1MODELNAME,
    :NEW.DCENERGYMETEROWNSRNO,
    :NEW.DLMODELFDPFDMS1_COUNT,
    :NEW.DLMODELFDPFDMS1,
    :NEW.DFDPMAKE,
    :NEW.DLMODELFDPFDMS_COUNT,
    :NEW.DLMODELFDPFDMS,
    :NEW.DODCMAKE,
    :NEW.DLDOCMODELNAME,
    :NEW.ODCSERIALNO,
    :NEW.DLGO,
    :NEW.DSHELTERMAKE,
    :NEW.DSHELTERSRNO,
    :NEW.DCONTROLLERADDRESS,
    :NEW.DSMPSMAKE,
    :NEW.DLMODELSMPS,
    :NEW.DPAUIPADDRESS,
    :NEW.DSMPSRECTIFIERSRNO1,
    :NEW.DSMPSRECTIFIERSRNO2,
    :NEW.DSMPSRECTIFIERSRNO3,
    :NEW.DSMPSRECTIFIERSRNO4,
    :NEW.DSMPSRECTIFIERSRNO5,
    :NEW.DSMPSRECTIFIERSRNO6,
    :NEW.DSMPSSRNO,
    :NEW.DLLTOWERTYPE,
    :NEW.DSUPPLIERFDMS,
    :NEW.DRFE1DECLARED,
    :NEW.SITE_TYPE,
    :NEW.DSMPSRECTIFIERSRNO7,
    :NEW.DSMPSRECTIFIERSRNO8,
    :NEW.DSMPSRECTIFIERSRNO9,
    :NEW.DSMPSRECTIFIERSRNO10,
    :NEW.DSMPSRECTIFIERSRNO11,
    :NEW.DSMPSRECTIFIERSRNO12,
    :NEW.ALARM_GATEWAY_MAKE,
    :NEW.ALARM_GATEWAY_MODEL_NAME,
    :NEW.ALRM_GTWAY_INTS_DT,
    :NEW.ALRM_GTWAY_SR_NO,
    :NEW.ALRM_GTWAY_COMM_DT
  );
END;
/
补充优化建议
  • 你当前使用的是行级触发器(带FOR EACH ROW),如果批量操作SF_NE_DETAILS表的多条数据,会每一行都触发一次全表删除,性能较低。如果你的业务不需要按行触发,可以去掉FOR EACH ROW改为语句级触发器,批量操作时只会执行一次删除。
  • 建议删除条件中可以补充对应rf_siteid/sap_id的过滤,避免删除不相关的符合条件的数据,更符合数据关联逻辑。

内容的提问来源于stack exchange,提问作者Nadeem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 03:39:03