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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

Oracle中通过存储过程,Function,触发器实现解析时间类型的字段并插入的对应的数据表中...

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

摘要:之前在項(xiàng)目中解決了插入字符串類型的數(shù)據(jù),今天試著寫了一個(gè)插入date類型的字段,成功了,現(xiàn)在記錄一下,以便以后查看:

一:首先建立一個(gè)根據(jù)xml節(jié)點(diǎn)名稱獲取對(duì)應(yīng)的xml值的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);--釋放解析器實(shí)例xmlparser.freeParser (xmlPar);--獲取所有item節(jié)點(diǎn)itemNodes := xmldom.getElementsByTagName (xDoc, nodeName);--獲取item節(jié)點(diǎn)的個(gè)數(shù)lenItme := xmldom.getLength (itemNodes);--如果無(wú)該標(biāo)簽,則返回EMPTYIF lenItme = 0 THENValueReturn := ' ';ELSE--獲取節(jié)點(diǎn)列表中的第1個(gè)item節(jié)點(diǎn)itemNode := xmldom.item (itemNodes, 0);--獲取所有子節(jié)點(diǎn)的值ValueReturn := xmldom.getNodeValue (xmldom.getFirstChild (itemNode));END IF; --釋放domxmldom.freeDocument(xDoc);RETURN ValueReturn;END GetXmlNodeValue; /

二:其次建立一個(gè)格式化字符串時(shí)間的Funcation.sql:

CREATE OR REPLACE FUNCTION MIP.FormatDateValue (key VARCHAR2, value VARCHAR2)RETURN VARCHAR2 IS--定義幾個(gè)變量,出來(lái)解析過(guò)來(lái)的時(shí)間字符串--日月年時(shí)分(11OCT141024)AA VARCHAR2(32);DAY VARCHAR2(100);MOUNTH VARCHAR2(100);YEAR VARCHAR2(100);HOUR VARCHAR2(100);MINUTE VARCHAR2(100);ValueReturn VARCHAR2 (100);BEGINIF key = ' ' THENValueReturn := ' ';RETURN ValueReturn;ELSEDAY := SUBSTR(key,0,2);MOUNTH := SUBSTR(key,3,3);IF INSTR (MOUNTH,'JAN') > 0 THENMOUNTH := 01;END IF;IF INSTR (MOUNTH,'FEB') > 0 THENMOUNTH := 02;END IF;IF INSTR (MOUNTH,'MAR') > 0 THENMOUNTH := 03;END IF;IF INSTR (MOUNTH,'APR') > 0 THENMOUNTH := 04;END IF;IF INSTR (MOUNTH,'MAY') > 0 THENMOUNTH := 05;END IF;IF INSTR (MOUNTH,'JUN') > 0 THENMOUNTH := 06;END IF;IF INSTR (MOUNTH,'JUL') > 0 THENMOUNTH := 07;END IF;IF INSTR (MOUNTH,'AUG') > 0 THENMOUNTH := 08;END IF;IF INSTR (MOUNTH,'SEP') > 0 THENMOUNTH := 09;END IF;IF INSTR (MOUNTH,'OCT') > 0 THENMOUNTH := 10;END IF;IF INSTR (MOUNTH,'NOV') > 0 THENMOUNTH := 11;END IF;IF INSTR (MOUNTH,'DEC') > 0 THENMOUNTH := 12;END IF;YEAR := SUBSTR(key,6,2);HOUR := SUBSTR(key,8,2);MINUTE := SUBSTR(key,-2);AA := 20;--日月年時(shí)分(11OCT141017)ValueReturn := AA || YEAR || '-' || MOUNTH || '-' || DAY || ' ' || HOUR || ':' || MINUTE;--ValueReturn := HOUR || ':' || MINUTE;RETURN ValueReturn;END IF;END FormatDateValue; /

三:建立插入數(shù)據(jù)表的存儲(chǔ)過(guò)程.sql:

CREATE OR REPLACE PROCEDURE MIP.PRO_TEST (xmlStr IN CLOB) ISTIME VARCHAR2(100);TIME_F VARCHAR2(100);BEGIN--TIME := GetXmlNodeValue (xmlStr, 'TIME');TIME_F := FORMATDATEVALUE (GetXmlNodeValue (xmlStr, 'TIME'), 'TIME_F');INSERT INTO TEST (ID,TIME) VALUES (TEST_SEQ.NEXTVAL,to_date(TIME_F,'yyyy-mm-dd hh24:mi:ss'));COMMIT;EXCEPTIONWHEN OTHERSTHENDBMS_OUTPUT.PUT_LINE (SQLERRM);END PRO_TEST; /

四:建立行級(jí)觸發(fā)器.sql:

DROP TRIGGER MIP.COPY_TEST_TRIGGER;CREATE OR REPLACE TRIGGER MIP.COPY_TEST_TRIGGERAFTER INSERTON MIP.MBINMSGS FOR EACH ROW DECLARE -- LOCAL VARIABLES HERE BEGINPRO_TEST (:NEW.MBINMSGS_CLOB_MSG); END COPY_TEST_TRIGGER; /
五:給其中的原始數(shù)據(jù)表插入一條數(shù)據(jù),查看是否解析成功并插入到對(duì)應(yīng)的表中:

Insert into MBINMSGS(ID, MBINMSGS_CLOB_MSG, MBINMSGS_DATE_RECEIVED, MBINMSGS_DATE_PROCESSED, MBINMSGS_SUBSYSTEM_NAME, MBINMSGS_SUBSYSTEM_DATE_SENT, SERVICENAME)Values(1931300, '<?xml version="1.0" encoding="UTF-8"?> <ASUPDATA><MSG> <META> <SNDR>DC</SNDR> <DTTM>20141010230216</DTTM> <TYPE>FLOP</TYPE> <STYP>FGIS</STYP> </META> <FLOP> <FFID>CA-CA1895-D-11OCT141730-D</FFID> <TIME>11OCT141730</TIME> </FLOP></MSG> </ASUPDATA>', TO_DATE('10/20/2014 11:20:42', 'MM/DD/YYYY HH24:MI:SS'), TO_DATE('10/20/2014 17:23:40', 'MM/DD/YYYY HH24:MI:SS'), 'DC2', TO_DATE('10/20/2014 11:28:05', 'MM/DD/YYYY HH24:MI:SS'), 'DC2GIS');COMMIT;
六:查看對(duì)應(yīng)的數(shù)據(jù)表中時(shí)間類型的字段是否有值:



總結(jié)

以上是生活随笔為你收集整理的Oracle中通过存储过程,Function,触发器实现解析时间类型的字段并插入的对应的数据表中...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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