日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle中通过:触发器,存储过程,Function调用实现解析Clob字段类型中存储的xml字符串...

發(fā)布時(shí)間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle中通过:触发器,存储过程,Function调用实现解析Clob字段类型中存储的xml字符串... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

摘要:最近項(xiàng)目中用到了存儲(chǔ)過程,觸發(fā)器,Function,由于以前沒怎么用過,所以查資料,請(qǐng)教同事,最后總算是把問題解決了,問題是這樣的,數(shù)據(jù)庫中有三張表一張是存放從遠(yuǎn)程服務(wù)器獲取數(shù)據(jù)的MBINMSGS表,這個(gè)表里面有個(gè)Clob字段,里面存放的是xml格式的字符串,我們要把這個(gè)表里面的xml字符串通過Oracle解析出來,然后再把解析出來的數(shù)據(jù)插入對(duì)應(yīng)的數(shù)據(jù)表:TB_CMS_FLGTINFO_A表和TB_CMS_FLGTINFO_D表,以上就是問題的描述,下面我把我的代碼貼出了,以供大家參考:

一:數(shù)據(jù)表結(jié)構(gòu)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--創(chuàng)建xml解析器實(shí)例xmlparser.ParserxmlPar xmlparser.Parser := xmlparser.newParser;--定義DOM文檔xDoc xmldom.DOMDocument;--定義item子節(jié)點(diǎn)數(shù)目變量lenItme INTEGER;--定義節(jié)點(diǎn)列表,存放item節(jié)點(diǎn)們itemNodes xmldom.DOMNodeList;--定義節(jié)點(diǎn),存放單個(gè)item節(jié)點(diǎn)itemNode xmldom.DOMNode;ValueReturn VARCHAR2 (100); BEGIN--解析xmlStr中xml字符串,并存放到xmlPar中xmlparser.parseClob (xmlPar, xmlStr);--將xmlPar中的數(shù)據(jù)轉(zhuǎn)存到dom文檔中xDoc := xmlparser.getDocument (xmlPar);xmlparser.freeParser (xmlPar); --釋放解析器實(shí)例--獲取所有item節(jié)點(diǎn)itemNodes := xmldom.getElementsByTagName (xDoc, nodeName);--獲取item節(jié)點(diǎn)的個(gè)數(shù)lenItme := xmldom.getLength (itemNodes);IF lenItme = 0THENRETURN '';END IF;--獲取節(jié)點(diǎn)列表中的第1個(gè)item節(jié)點(diǎn)itemNode := xmldom.item (itemNodes, 0);--獲取所有子節(jié)點(diǎn)的值ValueReturn := xmldom.getNodeValue (xmldom.getFirstChild (itemNode));RETURN ValueReturn; END GetXmlNodeValue; /

三:存儲(chǔ)過程.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; /

四:觸發(fā)器.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,存儲(chǔ)過程,觸發(fā)器都編譯一下,就可以執(zhí)行了,執(zhí)行過程是:給表MBINMSGS中每插入一條數(shù)據(jù),觸發(fā)器就觸發(fā)存儲(chǔ)過程,存儲(chǔ)過程再調(diào)用Function,最后把解析出來的xml字符串插入到對(duì)應(yīng)的數(shù)據(jù)表中。

總結(jié)

以上是生活随笔為你收集整理的Oracle中通过:触发器,存储过程,Function调用实现解析Clob字段类型中存储的xml字符串...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。