米特号类似网站,宁波seo关键词引流,wordpress亲子模板,天津专业网站建设公司摘要#xff1a;最近项目中用到了存储过程#xff0c;触发器#xff0c;Function#xff0c;由于以前没怎么用过#xff0c;所以查资料#xff0c;请教同事#xff0c;最后总算是把问题解决了#xff0c;问题是这样的#xff0c;数据库中有三张表一张是存放从远程服务…摘要最近项目中用到了存储过程触发器Function由于以前没怎么用过所以查资料请教同事最后总算是把问题解决了问题是这样的数据库中有三张表一张是存放从远程服务器获取数据的MBINMSGS表这个表里面有个Clob字段里面存放的是xml格式的字符串我们要把这个表里面的xml字符串通过Oracle解析出来然后再把解析出来的数据插入对应的数据表TB_CMS_FLGTINFO_A表和TB_CMS_FLGTINFO_D表以上就是问题的描述下面我把我的代码贴出了以供大家参考
一数据表结构SQL CREATE TABLE MIP.MBINMSGS
(ID NUMBER(30) NOT NULL,MBINMSGS_CLOB_MSG CLOB,MBINMSGS_DATE_RECEIVED DATE,MBINMSGS_DATE_PROCESSED DATE,MBINMSGS_SUBSYSTEM_NAME VARCHAR2(100 BYTE),MBINMSGS_SUBSYSTEM_DATE_SENT DATE,SERVICENAME VARCHAR2(30 BYTE) NOT NULL
) CREATE TABLE MIP.TB_CMS_FLGTINFO_A
(ID NUMBER(10) NOT NULL,ABNS VARCHAR2(64 BYTE),ACFT VARCHAR2(64 BYTE),AIRLINE VARCHAR2(64 BYTE),ALAP VARCHAR2(64 BYTE),BETM VARCHAR2(64 BYTE),CHDT VARCHAR2(64 BYTE),EIBT VARCHAR2(64 BYTE),FATA VARCHAR2(64 BYTE),FETA VARCHAR2(64 BYTE),FFID VARCHAR2(64 BYTE),FSTA VARCHAR2(64 BYTE),LMDT VARCHAR2(64 BYTE),LMUR VARCHAR2(64 BYTE),PSTM VARCHAR2(64 BYTE),RENO VARCHAR2(64 BYTE),RWAY VARCHAR2(64 BYTE),SPOT VARCHAR2(64 BYTE),STND VARCHAR2(64 BYTE)
) CREATE TABLE MIP.TB_CMS_FLGTINFO_D
(ID NUMBER(10) NOT NULL,A_TOBT VARCHAR2(64 BYTE),A_WEATHER VARCHAR2(64 BYTE),ABNS VARCHAR2(64 BYTE),ACFT VARCHAR2(64 BYTE),AIRLINE VARCHAR2(64 BYTE),ASAT VARCHAR2(64 BYTE),BCTM VARCHAR2(64 BYTE),BOTM VARCHAR2(64 BYTE),BSTM VARCHAR2(64 BYTE),C_TOBT VARCHAR2(64 BYTE),COBT VARCHAR2(64 BYTE),CTOT VARCHAR2(64 BYTE),DINT VARCHAR2(64 BYTE),DLAB VARCHAR2(64 BYTE),DNAP VARCHAR2(64 BYTE),DOUT VARCHAR2(64 BYTE),EDDI VARCHAR2(64 BYTE),EOBT VARCHAR2(64 BYTE),EPGT VARCHAR2(64 BYTE),EPOT VARCHAR2(64 BYTE),FATD VARCHAR2(64 BYTE),FFID VARCHAR2(64 BYTE),FSTD VARCHAR2(64 BYTE),LMDT VARCHAR2(64 BYTE),LMUR VARCHAR2(64 BYTE),OFTM VARCHAR2(64 BYTE),RENO VARCHAR2(64 BYTE),RWAY VARCHAR2(64 BYTE),STDI VARCHAR2(64 BYTE),STND VARCHAR2(64 BYTE),TSAT VARCHAR2(64 BYTE)
) 二Function.SQL CREATE OR REPLACE FUNCTION MIP.GetXmlNodeValue (xmlStr CLOB, nodeName VARCHAR2)RETURN VARCHAR2
IS--创建xml解析器实例xmlparser.ParserxmlPar 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);IF lenItme 0THENRETURN ;END IF;--获取节点列表中的第1个item节点itemNode : xmldom.item (itemNodes, 0);--获取所有子节点的值ValueReturn : xmldom.getNodeValue (xmldom.getFirstChild (itemNode));RETURN ValueReturn;
END GetXmlNodeValue;
/三存储过程.SQL CREATE OR REPLACE PROCEDURE MIP.MIP_PARSE (xmlStr IN CLOB)
ISRENO 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);--FFID VARCHAR2 (100);FSTA VARCHAR2 (100);LMDT VARCHAR2 (100);LMUR VARCHAR2 (100);PSTM VARCHAR2 (100);RWAY VARCHAR2 (100);SPOT VARCHAR2 (100);STND VARCHAR2 (100);A_TOBT VARCHAR2 (100);A_WEATHER VARCHAR2 (100);--ABNS VARCHAR2 (100);--ACFT VARCHAR2 (100);ASAT VARCHAR2 (100);BCTM VARCHAR2 (100);BOTM VARCHAR2 (100);BSTM VARCHAR2 (100);C_TOBT VARCHAR2 (100);COBT VARCHAR2 (100);CTOT VARCHAR2 (100);DINT VARCHAR2 (100);DLAB VARCHAR2 (100);DOUT VARCHAR2 (100);EDDI VARCHAR2 (100);EOBT VARCHAR2 (100);EPGT VARCHAR2 (100);EPOT VARCHAR2 (100);FATD VARCHAR2 (100);--FFID VARCHAR2 (100);FSTD VARCHAR2 (100);--LMDT VARCHAR2 (100);--LMUR VARCHAR2 (100);OFTM VARCHAR2 (100);--RENO VARCHAR2 (100);--RWAY VARCHAR2 (100);STDI VARCHAR2 (100);--STND VARCHAR2 (100);TSAT VARCHAR2 (100);BEGINRENO : GetXmlNodeValue (xmlStr, RENO);AIRLINE : GetXmlNodeValue (xmlStr, AIRLINE);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);FFID : GetXmlNodeValue (xmlStr, FFID);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);A_TOBT : GetXmlNodeValue (xmlStr, A_TOBT);A_WEATHER : GetXmlNodeValue (xmlStr, A_WEATHER);--ABNS : GetXmlNodeValue (xmlStr, ABNS);--ACFT : GetXmlNodeValue (xmlStr, ACFT);ASAT : GetXmlNodeValue (xmlStr, ASAT);BCTM : GetXmlNodeValue (xmlStr, BCTM);BOTM : GetXmlNodeValue (xmlStr, BOTM);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);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);--LMDT : GetXmlNodeValue (xmlStr, LMDT);--LMUR : GetXmlNodeValue (xmlStr, LMUR);OFTM : GetXmlNodeValue (xmlStr, OFTM);STDI : GetXmlNodeValue (xmlStr, STDI);TSAT : GetXmlNodeValue (xmlStr, TSAT);IF INSTR(FFID,-D-) 0 THENFFID_D : FFID;INSERT INTO TB_CMS_FLGTINFO_D (ID,A_TOBT,A_WEATHER,ABNS,ACFT,AIRLINE,ASAT,BCTM,BOTM,BSTM,C_TOBT,COBT,CTOT,DINT,DLAB,DOUT,EDDI,EOBT,EPGT,EPOT,FATD,FFID,FSTD,LMDT,LMUR,OFTM,RENO,RWAY,STDI,STND,TSAT)VALUES (FLGTINFO_D_SEQ.NEXTVAL,A_TOBT,A_WEATHER,ABNS,ACFT,AIRLINE,ASAT,BCTM,BOTM,BSTM,C_TOBT,COBT,CTOT,DINT,DLAB,DOUT,EDDI,EOBT,EPGT,EPOT,FATD,FFID_D,FSTD,LMDT,LMUR,OFTM,RENO,RWAY,STDI,STND,TSAT);ELSEFFID_A : FFID; INSERT INTO TB_CMS_FLGTINFO_A (ID,ABNS,ACFT,AIRLINE,CHDT,FFID,RENO,EIBT,FATA,FETA,FSTA,LMDT,LMUR,PSTM,RWAY,SPOT,STND)VALUES (FLGTINFO_A_SEQ.NEXTVAL,ABNS,ACFT,AIRLINE,CHDT,FFID_A,RENO,EIBT,FATA,FETA,FSTA,LMDT,LMUR,PSTM,RWAY,SPOT,STND);END IF;COMMIT;
EXCEPTIONWHEN OTHERSTHENDBMS_OUTPUT.PUT_LINE (SQLERRM);
END MIP_PARSE;
/四触发器.SQL DROP TRIGGER MIP.COPY_MIPDATA_TRIGGER;CREATE OR REPLACE TRIGGER MIP.COPY_MIPDATA_TRIGGERAFTER INSERTON MIP.MBINMSGS FOR EACH ROW
DECLARE
-- LOCAL VARIABLES HERE
BEGINMIP_PARSE (:NEW.MBINMSGS_CLOB_MSG);
END COPY_MIPDATA_TRIGGER;
/五最后把所有的Function存储过程触发器都编译一下就可以执行了执行过程是给表MBINMSGS中每插入一条数据触发器就触发存储过程存储过程再调用Function最后把解析出来的xml字符串插入到对应的数据表中。