摘要:之前在项目中使用到了Oracle数据库中通过触发器去调用存储过程执行数据解析并Update到对应的数据表中,但是,经过一段时间的测试使用发现,如果job那天停掉了,然后你再重新新建job的话,这时候可能会有很多遗留的数据没有出来,因为之前是通过触发器的方式,来一条数据,解析一条并Update到对应的数据表中,现在一下要执行很多数据,就会报错内存溢出的错误,所以后来经过分析讨论,把之前通过触发器解析的方式改成了通过job来定时调用存储过程解析,并且在存储过程中增加了游标的使用,这样就不会有丢失的数据,同时也能保证在那天job出问题了,再新建job后数据解析出现问题了,具体的sql如下:
这里我把我用到的所有的存储过程,函数,job的sql都贴上来,方便大家参考:
一:函数:
CREATE OR REPLACE FUNCTION MIP.FormatDateValue (key VARCHAR2,value VARCHAR2) RETURN VARCHAR2 IS --定义几个变量,出来解析过来的时间字符串 --日月年时分(11OCT141024) Str VARCHAR2(32); AA VARCHAR2(32); DAY VARCHAR2(32); MOUNTH VARCHAR2(32); YEAR VARCHAR2(32); HOUR VARCHAR2(32); MINUTE VARCHAR2(32); ValueReturn VARCHAR2 (64); BEGIN IF key != ' ' THEN DAY := SUBSTR(key,2); MOUNTH := SUBSTR(key,3,3); IF INSTR (MOUNTH,'JAN') > 0 THEN MOUNTH := 01; END IF; IF INSTR (MOUNTH,'FEB') > 0 THEN MOUNTH := 02; END IF; IF INSTR (MOUNTH,'MAR') > 0 THEN MOUNTH := 03; END IF; IF INSTR (MOUNTH,'APR') > 0 THEN MOUNTH := 04; END IF; IF INSTR (MOUNTH,'MAY') > 0 THEN MOUNTH := 05; END IF; IF INSTR (MOUNTH,'JUN') > 0 THEN MOUNTH := 06; END IF; IF INSTR (MOUNTH,'JUL') > 0 THEN MOUNTH := 07; END IF; IF INSTR (MOUNTH,'AUG') > 0 THEN MOUNTH := 08; END IF; IF INSTR (MOUNTH,'SEP') > 0 THEN MOUNTH := 09; END IF; IF INSTR (MOUNTH,'OCT') > 0 THEN MOUNTH := 10; END IF; IF INSTR (MOUNTH,'NOV') > 0 THEN MOUNTH := 11; END IF; IF INSTR (MOUNTH,'DEC') > 0 THEN MOUNTH := 12; END IF; YEAR := SUBSTR(key,6,2); HOUR := SUBSTR(key,8,2); MINUTE := SUBSTR(key,-2); AA := 20; Str := 0; --日月年时分(11OCT141017) IF length(MOUNTH) < 2 THEN MOUNTH := Str||MOUNTH; ValueReturn := AA || YEAR || '-' || MOUNTH || '-' || DAY || ' ' || HOUR || ':' || MINUTE; ELSE ValueReturn := AA || YEAR || '-' || MOUNTH || '-' || DAY || ' ' || HOUR || ':' || MINUTE; END IF; --ValueReturn := HOUR || ':' || MINUTE; RETURN ValueReturn; ELSE ValueReturn := ' '; RETURN ValueReturn; END IF; END FormatDateValue; / CREATE OR REPLACE FUNCTION MIP.GetXmlNodeValue (xmlStr CLOB,nodeName VARCHAR2) RETURN VARCHAR2 IS --创建xml解析器实例xmlparser.Parser xmlPar xmlparser.Parser := xmlparser.newParser; --定义DOM文档 xDoc xmldom.DOMDocument; --定义item子节点数目变量 lenItme INTEGER; --定义节点列表,存放item节点们 itemNodes xmldom.DOMNodeList; --定义节点,存放单个item节点 itemNode xmldom.DOMNode; ValueReturn VARCHAR2 (100); BEGIN --解析xmlStr中xml字符串,并存放到xmlPar中 xmlparser.parseClob (xmlPar,xmlStr); --将xmlPar中的数据转存到dom文档中 xDoc := xmlparser.getDocument (xmlPar); --释放解析器实例 xmlparser.freeParser (xmlPar); --获取所有item节点 itemNodes := xmldom.getElementsByTagName (xDoc,nodeName); --获取item节点的个数 lenItme := xmldom.getLength (itemNodes); --如果无该标签,则返回EMPTY IF lenItme = 0 THEN ValueReturn := ' '; ELSE --获取节点列表中的第1个item节点 itemNode := xmldom.item (itemNodes,0); --获取所有子节点的值 ValueReturn := xmldom.getNodeValue (xmldom.getFirstChild (itemNode)); END IF; --释放dom xmldom.freeDocument(xDoc); RETURN ValueReturn; END GetXmlNodeValue; /
二:存储过程:
CREATE OR REPLACE PROCEDURE MIP.JOB_PRO_TEMP AS TEMP_ID NUMBER; BEGIN SELECT NVL (MAX (ID),0) INTO TEMP_ID FROM MBINMSGS_TEMP; INSERT INTO MBINMSGS_TEMP SELECT * FROM MBINMSGS WHERE MBINMSGS.ID > TEMP_ID; --WHERE MBINMSGS.mbinmsgs_date_processed > to_date('2015-1-12 12:21:23','yyyy-mm-dd hh24:mi:ss'); COMMIT; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE ('Exception happened,data was rollback'); ROLLBACK; END; / CREATE OR REPLACE PROCEDURE MIP.LOOP_COPY_PRO_TEMP AS BEGIN DECLARE --定义游标 CURSOR c_cursor IS --这里查询指定时间内的数据,根据时间判断一下id>那个编号开始 SELECT ID,MBINMSGS_CLOB_MSG FROM MBINMSGS_TEMP WHERE MBINMSGS_DATE_PROCESSED IS NULL ORDER BY ID DESC; v_ID MBINMSGS_TEMP.ID%TYPE; v_MBINMSGS_CLOB_MSG MBINMSGS_TEMP.MBINMSGS_CLOB_MSG%TYPE; BEGIN --打开游标 OPEN c_cursor; --提取游标数据 FETCH c_cursor INTO v_ID,v_MBINMSGS_CLOB_MSG; WHILE c_cursor%FOUND LOOP DBMS_OUTPUT.put_line (v_ID ||':'||v_MBINMSGS_CLOB_MSG); MIP_PARSE(v_MBINMSGS_CLOB_MSG); UPDATE MBINMSGS_TEMP SET MBINMSGS_DATE_PROCESSED = SYSDATE WHERE ID=v_ID; FETCH c_cursor INTO v_ID,v_MBINMSGS_CLOB_MSG; END LOOP; --关闭游标 CLOSE c_cursor; COMMIT; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE ('Exception happened,data was rollback'); ROLLBACK; END; END; / CREATE OR REPLACE PROCEDURE MIP.MIP_PARSE (xmlStr IN CLOB) IS STYP VARCHAR2 (100); RENO VARCHAR2 (100); AIRLINE VARCHAR2 (100); FFID VARCHAR2 (100); FFID_A VARCHAR2 (100); FFID_D VARCHAR2 (100); ABNS VARCHAR2 (100); ACFT VARCHAR2 (100); CHDT VARCHAR2 (100); EIBT VARCHAR2 (100); FATA VARCHAR2 (100); FETA VARCHAR2 (100); FSTA VARCHAR2 (100); LMDT VARCHAR2 (100); LMUR VARCHAR2 (100); PSTM VARCHAR2 (100); RWAY VARCHAR2 (100); SPOT VARCHAR2 (100); STND VARCHAR2 (100); SDEC VARCHAR2 (100); A_TOBT VARCHAR2 (100); A_WEATHER VARCHAR2 (100); ASAT VARCHAR2 (100); BCTM VARCHAR2 (100); BOTM VARCHAR2 (100); BETM VARCHAR2 (100); BSTM VARCHAR2 (100); C_TOBT VARCHAR2 (100); COBT VARCHAR2 (100); CTOT VARCHAR2 (100); DINT VARCHAR2 (100); DLAB VARCHAR2 (100); DNAP VARCHAR2 (100); DOUT VARCHAR2 (100); EDDI VARCHAR2 (100); EOBT VARCHAR2 (100); EPGT VARCHAR2 (100); EPOT VARCHAR2 (100); FATD VARCHAR2 (100); FSTD VARCHAR2 (100); OFTM VARCHAR2 (100); STDI VARCHAR2 (100); TSAT VARCHAR2 (100); FLIGHTNUMBER VARCHAR2 (100); FLIGHTMARK VARCHAR2 (100); ALAP VARCHAR2 (100); APRT VARCHAR2 (100); DPRT VARCHAR2 (100); PARK VARCHAR2 (100); INTERNALORINTERNATIONAL VARCHAR2 (100); TERMINAL VARCHAR2 (100); GROUNDDISTRIBUTION VARCHAR2 (100); --定义出港信息表要格式的时间字段 A_TOBT_D VARCHAR2 (100); ASAT_D VARCHAR2 (100); BCTM_D VARCHAR2 (100); BOTM_D VARCHAR2 (100); BETM_D VARCHAR2 (100); C_TOBT_D VARCHAR2 (100); COBT_D VARCHAR2 (100); CTOT_D VARCHAR2 (100); DINT_D VARCHAR2 (100); DOUT_D VARCHAR2 (100); EDDI_D VARCHAR2 (100); EOBT_D VARCHAR2 (100); EPGT_D VARCHAR2 (100); EPOT_D VARCHAR2 (100); FATD_D VARCHAR2 (100); FSTD_D VARCHAR2 (100); LMDT_D VARCHAR2 (100); OFTM_D VARCHAR2 (100); STDI_D VARCHAR2 (100); TSAT_D VARCHAR2 (100); --定义进港信息表要格式化的时间字段 BSTM_A VARCHAR2 (100); EIBT_A VARCHAR2 (100); FATA_A VARCHAR2 (100); FETA_A VARCHAR2 (100); FSTA_A VARCHAR2 (100); LMDT_A VARCHAR2 (100); PSTM_A VARCHAR2 (100); SPOT_A VARCHAR2 (100); COUNTS NUMBER(36); --定义出港信息要修改的除时间外的字段 STND_D VARCHAR2 (100); A_WEATHER_D VARCHAR2 (100); ABNS_D VARCHAR2 (100); ACFT_D VARCHAR2 (100); AIRLINE_D VARCHAR2 (100); DLAB_D VARCHAR2 (100); DNAP_D VARCHAR2 (100); LMUR_D VARCHAR2 (100); RENO_D VARCHAR2 (100); RWAY_D VARCHAR2 (100); DPRT_D VARCHAR2 (100); PARK_D VARCHAR2 (100); INTERNALORINTERNATIONAL_D VARCHAR2 (100); TERMINAL_D VARCHAR2 (100); GROUNDDISTRIBUTION_D VARCHAR2 (100); --定义进港信息要修改的除时间外的字段 ABNS_A VARCHAR2 (100); ACFT_A VARCHAR2 (100); AIRLINE_A VARCHAR2 (100); ALAP_A VARCHAR2 (100); APRT_A VARCHAR2 (100); CHDT_A VARCHAR2 (100); RENO_A VARCHAR2 (100); LMUR_A VARCHAR2 (100); RWAY_A VARCHAR2 (100); STND_A VARCHAR2 (100); PARK_A VARCHAR2 (100); INTERNALORINTERNATIONAL_A VARCHAR2 (100); TERMINAL_A VARCHAR2 (100); GROUNDDISTRIBUTION_A VARCHAR2 (100); BEGIN STYP := GetXmlNodeValue (xmlStr,'STYP'); RENO := GetXmlNodeValue (xmlStr,'RENO'); FFID := GetXmlNodeValue (xmlStr,'FFID'); ABNS := GetXmlNodeValue (xmlStr,'ABNS'); ACFT := GetXmlNodeValue (xmlStr,'ACFT'); CHDT := GetXmlNodeValue (xmlStr,'CHDT'); EIBT := GetXmlNodeValue (xmlStr,'EIBT'); FATA := GetXmlNodeValue (xmlStr,'FATA'); FETA := GetXmlNodeValue (xmlStr,'FETA'); FSTA := GetXmlNodeValue (xmlStr,'FSTA'); LMDT := GetXmlNodeValue (xmlStr,'LMDT'); LMUR := GetXmlNodeValue (xmlStr,'LMUR'); PSTM := GetXmlNodeValue (xmlStr,'PSTM'); RWAY := GetXmlNodeValue (xmlStr,'RWAY'); SPOT := GetXmlNodeValue (xmlStr,'SPOT'); STND := GetXmlNodeValue (xmlStr,'STND'); SDEC := GetXmlNodeValue (xmlStr,'STND'); A_TOBT := GetXmlNodeValue (xmlStr,'A_TOBT'); A_WEATHER := GetXmlNodeValue (xmlStr,'A_WEATHER'); ALAP := GetXmlNodeValue (xmlStr,'ALAP'); APRT := GetXmlNodeValue (xmlStr,'APRT'); ASAT := GetXmlNodeValue (xmlStr,'ASAT'); BCTM := GetXmlNodeValue (xmlStr,'BCTM'); BOTM := GetXmlNodeValue (xmlStr,'BOTM'); BETM := GetXmlNodeValue (xmlStr,'BETM'); BSTM := GetXmlNodeValue (xmlStr,'BSTM'); C_TOBT := GetXmlNodeValue (xmlStr,'C_TOBT'); COBT := GetXmlNodeValue (xmlStr,'COBT'); CTOT := GetXmlNodeValue (xmlStr,'CTOT'); DINT := GetXmlNodeValue (xmlStr,'DINT'); DLAB := GetXmlNodeValue (xmlStr,'DLAB'); DNAP := GetXmlNodeValue (xmlStr,'DNAP'); DOUT := GetXmlNodeValue (xmlStr,'DOUT'); EDDI := GetXmlNodeValue (xmlStr,'EDDI'); EOBT := GetXmlNodeValue (xmlStr,'EOBT'); EPGT := GetXmlNodeValue (xmlStr,'EPGT'); EPOT := GetXmlNodeValue (xmlStr,'EPOT'); FATD := GetXmlNodeValue (xmlStr,'FATD'); FSTD := GetXmlNodeValue (xmlStr,'FSTD'); OFTM := GetXmlNodeValue (xmlStr,'OFTM'); STDI := GetXmlNodeValue (xmlStr,'STDI'); TSAT := GetXmlNodeValue (xmlStr,'TSAT'); DPRT := GetXmlNodeValue (xmlStr,'DPRT'); PARK := GetXmlNodeValue (xmlStr,'PARK'); INTERNALORINTERNATIONAL := GetXmlNodeValue (xmlStr,'INTERNALORINTERNATIONAL'); TERMINAL := GetXmlNodeValue (xmlStr,'TERMINAL'); GROUNDDISTRIBUTION := GetXmlNodeValue (xmlStr,'GROUNDDISTRIBUTION'); --出港信息表中时间字段的时间格式函数的用法 A_TOBT_D := FORMATDATEVALUE (A_TOBT,'A_TOBT_D'); ASAT_D := FORMATDATEVALUE (ASAT,'ASAT_D'); BCTM_D := FORMATDATEVALUE (BCTM,'BCTM_D'); BOTM_D := FORMATDATEVALUE (BOTM,'BOTM_D'); BETM_D := FORMATDATEVALUE (BETM,'BETM_D'); C_TOBT_D := FORMATDATEVALUE (C_TOBT,'C_TOBT_D'); COBT_D := FORMATDATEVALUE (COBT,'COBT_D'); CTOT_D := FORMATDATEVALUE (CTOT,'CTOT_D'); DINT_D := FORMATDATEVALUE (DINT,'DINT_D'); DOUT_D := FORMATDATEVALUE (DOUT,'DOUT_D'); EDDI_D := FORMATDATEVALUE (EDDI,'EDDI_D'); EOBT_D := FORMATDATEVALUE (EOBT,'EOBT_D'); EPGT_D := FORMATDATEVALUE (EPGT,'EPGT_D'); EPOT_D := FORMATDATEVALUE (EPOT,'EPOT_D'); FATD_D := FORMATDATEVALUE (FATD,'FATD_D'); FSTD_D := FORMATDATEVALUE (FSTD,'FSTD_D'); LMDT_D := FORMATDATEVALUE (LMDT,'LMDT_D'); OFTM_D := FORMATDATEVALUE (OFTM,'OFTM_D'); STDI_D := FORMATDATEVALUE (STDI,'STDI_D'); TSAT_D := FORMATDATEVALUE (TSAT,'TSAT_D'); --进港信息表中时间字段的时间格式函数的用法 EIBT_A := FORMATDATEVALUE (EIBT,'EIBT_A'); FATA_A := FORMATDATEVALUE (FATA,'FATA_A'); FETA_A := FORMATDATEVALUE (FETA,'FETA_A'); FSTA_A := FORMATDATEVALUE (FSTA,'FSTA_A'); LMDT_A := FORMATDATEVALUE (LMDT,'LMDT_A'); PSTM_A := FORMATDATEVALUE (PSTM,'PSTM_A'); SPOT_A := FORMATDATEVALUE (SPOT,'SPOT_A'); BSTM_A := FORMATDATEVALUE (BSTM,'BSTM_A'); --出港信息要修改的除时间外的字段 STND_D := GetXmlNodeValue (xmlStr,'STND'); A_WEATHER_D := GetXmlNodeValue (xmlStr,'A_WEATHER'); ABNS_D := GetXmlNodeValue (xmlStr,'ABNS'); ACFT_D := GetXmlNodeValue (xmlStr,'ACFT'); AIRLINE_D := GetXmlNodeValue (xmlStr,'AIRLINE'); DLAB_D := GetXmlNodeValue (xmlStr,'DLAB'); DNAP_D := GetXmlNodeValue (xmlStr,'DNAP'); LMUR_D := GetXmlNodeValue (xmlStr,'LMUR'); RENO_D := GetXmlNodeValue (xmlStr,'RENO'); RWAY_D := GetXmlNodeValue (xmlStr,'RWAY'); DPRT_D := GetXmlNodeValue (xmlStr,'DPRT'); PARK_D := GetXmlNodeValue (xmlStr,'PARK'); TERMINAL_D := GetXmlNodeValue (xmlStr,'TERMINAL'); GROUNDDISTRIBUTION_D := GetXmlNodeValue (xmlStr,'GROUNDDISTRIBUTION'); --进港信息要修改的除时间外的字段 ABNS_A := GetXmlNodeValue (xmlStr,'ABNS'); ACFT_A := GetXmlNodeValue (xmlStr,'ACFT'); AIRLINE_A := GetXmlNodeValue (xmlStr,'AIRLINE'); ALAP_A := GetXmlNodeValue (xmlStr,'ALAP'); APRT_A := GetXmlNodeValue (xmlStr,'APRT'); CHDT_A := GetXmlNodeValue (xmlStr,'CHDT'); RENO_A := GetXmlNodeValue (xmlStr,'RENO'); LMUR_A := GetXmlNodeValue (xmlStr,'LMUR'); RWAY_A := GetXmlNodeValue (xmlStr,'RWAY'); STND_A := GetXmlNodeValue (xmlStr,'STND'); PARK_A := GetXmlNodeValue (xmlStr,'PARK'); TERMINAL_A := GetXmlNodeValue (xmlStr,'TERMINAL'); GROUNDDISTRIBUTION_A := GetXmlNodeValue (xmlStr,'GROUNDDISTRIBUTION'); IF STYP = 'FGIS' THEN IF INSTR(FFID,'-D-') > 0 THEN FFID_D := FFID; --截取航空公司代码 AIRLINE := SUBSTR(FFID_D,2); --截取航班号 FLIGHTNUMBER := SUBSTR(FFID_D,INSTR(FFID_D,'-',1)+1,1)+1)-INSTR(FFID_D,1)-1); --截取出港标志 FLIGHTMARK := SUBSTR(FFID_D,2,2)+1,3)-1-INSTR(FFID_D,2)); --截取进离港标志 INTERNALORINTERNATIONAL := SUBSTR(FFID_D,-1); --UPDATE之前要先根据FFID查询一下看看数据表中是否已经存在该条数据,如果存在就UPDATE,如果不存在就SAVE SELECT COUNT(1) INTO COUNTS FROM TB_CMS_FLGTINFO_D where FFID = FFID_D; IF COUNTS > 0 THEN IF A_TOBT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET A_TOBT = A_TOBT_D WHERE FFID = FFID_D; END IF; IF A_WEATHER_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET A_WEATHER = A_WEATHER_D WHERE FFID = FFID_D; END IF; IF ABNS_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET ABNS = ABNS_D WHERE FFID = FFID_D; END IF; IF ACFT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET ACFT = ACFT_D WHERE FFID = FFID_D; END IF; IF ASAT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET ASAT = ASAT_D WHERE FFID = FFID_D; END IF; IF BCTM_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET BCTM = BCTM_D WHERE FFID = FFID_D; END IF; IF BOTM_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET BOTM = BOTM_D WHERE FFID = FFID_D; END IF; IF BETM_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET BETM = BETM_D WHERE FFID = FFID_D; END IF; IF C_TOBT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET C_TOBT = C_TOBT_D WHERE FFID = FFID_D; END IF; IF COBT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET COBT = COBT_D WHERE FFID = FFID_D; END IF; IF CTOT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET CTOT = CTOT_D WHERE FFID = FFID_D; END IF; IF DINT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET DINT = DINT_D WHERE FFID = FFID_D; END IF; IF DLAB_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET DLAB = DLAB_D WHERE FFID = FFID_D; END IF; IF DNAP_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET DNAP = DNAP_D WHERE FFID = FFID_D; END IF; IF DOUT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET DOUT = DOUT_D WHERE FFID = FFID_D; END IF; IF EDDI_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET EDDI = EDDI_D WHERE FFID = FFID_D; END IF; IF EOBT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET EOBT = EOBT_D WHERE FFID = FFID_D; END IF; IF EPGT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET EPGT = EPGT_D WHERE FFID = FFID_D; END IF; IF EPOT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET EPOT = EPOT_D WHERE FFID = FFID_D; END IF; IF FATD_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET FATD = FATD_D WHERE FFID = FFID_D; END IF; IF FSTD_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET FSTD = FSTD_D WHERE FFID = FFID_D; END IF; IF LMDT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET LMDT = LMDT_D WHERE FFID = FFID_D; END IF; IF LMUR_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET LMUR = LMUR_D WHERE FFID = FFID_D; END IF; IF OFTM_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET OFTM = OFTM_D WHERE FFID = FFID_D; END IF; IF RENO_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET RENO = RENO_D WHERE FFID = FFID_D; END IF; IF RWAY_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET RWAY = RWAY_D WHERE FFID = FFID_D; END IF; IF STDI_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET STDI = STDI_D WHERE FFID = FFID_D; END IF; IF STND_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET STND = STND_D WHERE FFID = FFID_D; END IF; IF TSAT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET TSAT = TSAT_D WHERE FFID = FFID_D; END IF; IF DPRT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET DPRT = DPRT_D WHERE FFID = FFID_D; END IF; IF PARK_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET PARK = PARK_D WHERE FFID = FFID_D; END IF; IF TERMINAL_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET TERMINAL = TERMINAL_D WHERE FFID = FFID_D; END IF; IF GROUNDDISTRIBUTION_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET GROUNDDISTRIBUTION = GROUNDDISTRIBUTION_D WHERE FFID = FFID_D; END IF; ELSE INSERT INTO TB_CMS_FLGTINFO_D (ID,A_TOBT,A_WEATHER,ABNS,ACFT,AIRLINE,ASAT,BCTM,BOTM,BETM,C_TOBT,COBT,CTOT,DINT,DLAB,DNAP,DOUT,DPRT,EDDI,EOBT,EPGT,EPOT,FATD,FFID,FLIGHTNUMBER,FLIGHTMARK,FSTD,GROUNDDISTRIBUTION,INTERNALORINTERNATIONAL,LMDT,LMUR,OFTM,PARK,RENO,RWAY,STDI,STND,TERMINAL,TSAT) VALUES (FLGTINFO_D_SEQ.NEXTVAL,A_TOBT_D,ASAT_D,BCTM_D,BOTM_D,BETM_D,C_TOBT_D,COBT_D,CTOT_D,DINT_D,DOUT_D,EDDI_D,EOBT_D,EPGT_D,EPOT_D,FATD_D,FFID_D,FSTD_D,LMDT_D,OFTM_D,STDI_D,TSAT_D); END IF; ELSE FFID_A := FFID; --截取航空公司代码 AIRLINE := SUBSTR(FFID_A,2); --截取航班号 FLIGHTNUMBER := SUBSTR(FFID_A,INSTR(FFID_A,1)+1)-INSTR(FFID_A,1)-1); --截取出港标志 FLIGHTMARK := SUBSTR(FFID_A,3)-1-INSTR(FFID_A,2)); --截取进离港标志 INTERNALORINTERNATIONAL := SUBSTR(FFID_A,如果不存在就SAVE SELECT COUNT(1) INTO COUNTS FROM TB_CMS_FLGTINFO_A where FFID = FFID_A; IF COUNTS > 0 THEN IF ABNS_A != ' ' THEN UPDATE TB_CMS_FLGTINFO_A SET ABNS = ABNS_A WHERE FFID = FFID_A; END IF; IF ACFT_A != ' ' THEN UPDATE TB_CMS_FLGTINFO_A SET ACFT = ACFT_A WHERE FFID = FFID_A; END IF; IF ALAP_A != ' ' THEN UPDATE TB_CMS_FLGTINFO_A SET ALAP = ALAP_A WHERE FFID = FFID_A; END IF; IF BSTM_A != ' ' THEN UPDATE TB_CMS_FLGTINFO_A SET BSTM = BSTM_A WHERE FFID = FFID_A; END IF; IF CHDT_A != ' ' THEN UPDATE TB_CMS_FLGTINFO_A SET CHDT = CHDT_A WHERE FFID = FFID_A; END IF; IF RENO_A != ' ' THEN UPDATE TB_CMS_FLGTINFO_A SET RENO = RENO_A WHERE FFID = FFID_A; END IF; IF EIBT_A != ' ' THEN UPDATE TB_CMS_FLGTINFO_A SET EIBT = EIBT_A WHERE FFID = FFID_A; END IF; IF FATA_A != ' ' THEN UPDATE TB_CMS_FLGTINFO_A SET FATA = FATA_A WHERE FFID = FFID_A; END IF; IF FETA_A != ' ' THEN UPDATE TB_CMS_FLGTINFO_A SET FETA = FETA_A WHERE FFID = FFID_A; END IF; IF FSTA_A != ' ' THEN UPDATE TB_CMS_FLGTINFO_A SET FSTA = FSTA_A WHERE FFID = FFID_A; END IF; IF LMDT_A != ' ' THEN UPDATE TB_CMS_FLGTINFO_A SET LMDT = LMDT_A WHERE FFID = FFID_A; END IF; IF LMUR_A != ' ' THEN UPDATE TB_CMS_FLGTINFO_A SET LMUR = LMUR_A WHERE FFID = FFID_A; END IF; IF PSTM_A != ' ' THEN UPDATE TB_CMS_FLGTINFO_A SET PSTM = PSTM_A WHERE FFID = FFID_A; END IF; IF RWAY_A != ' ' THEN UPDATE TB_CMS_FLGTINFO_A SET RWAY = RWAY_A WHERE FFID = FFID_A; END IF; IF SPOT_A != ' ' THEN UPDATE TB_CMS_FLGTINFO_A SET SPOT = SPOT_A WHERE FFID = FFID_A; END IF; IF STND_A != ' ' THEN UPDATE TB_CMS_FLGTINFO_A SET STND = STND_A WHERE FFID = FFID_A; END IF; IF APRT_A != ' ' THEN UPDATE TB_CMS_FLGTINFO_A SET APRT = APRT_A WHERE FFID = FFID_A; END IF; IF PARK_A != ' ' THEN UPDATE TB_CMS_FLGTINFO_A SET PARK = PARK_A WHERE FFID = FFID_A; END IF; IF TERMINAL_A != ' ' THEN UPDATE TB_CMS_FLGTINFO_A SET TERMINAL = TERMINAL_A WHERE FFID = FFID_A; END IF; IF GROUNDDISTRIBUTION_A != ' ' THEN UPDATE TB_CMS_FLGTINFO_A SET GROUNDDISTRIBUTION = GROUNDDISTRIBUTION_A WHERE FFID = FFID_A; END IF; ELSE INSERT INTO TB_CMS_FLGTINFO_A (ID,ALAP,BSTM,CHDT,APRT,EIBT,FATA,FETA,FSTA,PSTM,SPOT,TERMINAL) VALUES (FLGTINFO_A_SEQ.NEXTVAL,BSTM_A,FFID_A,EIBT_A,FATA_A,FETA_A,FSTA_A,LMDT_A,PSTM_A,SPOT_A,TERMINAL); END IF; END IF; ELSE IF INSTR(FFID,如果不存在就SAVE SELECT COUNT(1) INTO COUNTS FROM TB_CMS_FLGTINFO_D where FFID = FFID_D; IF COUNTS > 0 THEN IF A_TOBT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET A_TOBT = A_TOBT_D WHERE FFID = FFID_D; END IF; IF A_WEATHER_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET A_WEATHER = A_WEATHER_D WHERE FFID = FFID_D; END IF; IF ABNS_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET ABNS = ABNS_D WHERE FFID = FFID_D; END IF; IF ACFT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET ACFT = ACFT_D WHERE FFID = FFID_D; END IF; IF ASAT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET ASAT = ASAT_D WHERE FFID = FFID_D; END IF; IF BCTM_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET BCTM = BCTM_D WHERE FFID = FFID_D; END IF; IF BOTM_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET BOTM = BOTM_D WHERE FFID = FFID_D; END IF; IF BETM_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET BETM = BETM_D WHERE FFID = FFID_D; END IF; IF C_TOBT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET C_TOBT = C_TOBT_D WHERE FFID = FFID_D; END IF; IF COBT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET COBT = COBT_D WHERE FFID = FFID_D; END IF; IF CTOT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET CTOT = CTOT_D WHERE FFID = FFID_D; END IF; IF DINT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET DINT = DINT_D WHERE FFID = FFID_D; END IF; IF DLAB_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET DLAB = DLAB_D WHERE FFID = FFID_D; END IF; IF DNAP_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET DNAP = DNAP_D WHERE FFID = FFID_D; END IF; IF DOUT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET DOUT = DOUT_D WHERE FFID = FFID_D; END IF; IF EDDI_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET EDDI = EDDI_D WHERE FFID = FFID_D; END IF; IF EOBT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET EOBT = EOBT_D WHERE FFID = FFID_D; END IF; IF EPGT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET EPGT = EPGT_D WHERE FFID = FFID_D; END IF; IF EPOT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET EPOT = EPOT_D WHERE FFID = FFID_D; END IF; IF FATD_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET FATD = FATD_D WHERE FFID = FFID_D; END IF; IF FSTD_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET FSTD = FSTD_D WHERE FFID = FFID_D; END IF; IF LMDT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET LMDT = LMDT_D WHERE FFID = FFID_D; END IF; IF LMUR_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET LMUR = LMUR_D WHERE FFID = FFID_D; END IF; IF OFTM_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET OFTM = OFTM_D WHERE FFID = FFID_D; END IF; IF RENO_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET RENO = RENO_D WHERE FFID = FFID_D; END IF; IF RWAY_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET RWAY = RWAY_D WHERE FFID = FFID_D; END IF; IF STDI_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET STDI = STDI_D WHERE FFID = FFID_D; END IF; IF SDEC != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET SDEC = SDEC WHERE FFID = FFID_D; END IF; IF TSAT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET TSAT = TSAT_D WHERE FFID = FFID_D; END IF; IF DPRT_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET DPRT = DPRT_D WHERE FFID = FFID_D; END IF; IF PARK_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET PARK = PARK_D WHERE FFID = FFID_D; END IF; IF TERMINAL_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET TERMINAL = TERMINAL_D WHERE FFID = FFID_D; END IF; IF GROUNDDISTRIBUTION_D != ' ' THEN UPDATE TB_CMS_FLGTINFO_D SET GROUNDDISTRIBUTION = GROUNDDISTRIBUTION_D WHERE FFID = FFID_D; END IF; ELSE INSERT INTO TB_CMS_FLGTINFO_D (ID,SDEC,TERMINAL); END IF; END IF; END IF; COMMIT; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE (sqlERRM); END MIP_PARSE; /
三:job:
var job_num number; begin dbms_job.submit(:job_num,'JOB_PRO_TEMP;',sysdate,'sysdate+1/24/60'); end; commit; var job_num number; begin dbms_job.submit(:job_num,'LOOP_COPY_PRO_TEMP;','sysdate+1/24/60'); end; commit;
以上就是所有在Oracle中用到的相关的PL-sql的语句!
原文链接:/oracle/212951.html