Oracle中通過存儲過程,Function,觸發器實現解析時間類型的字段并插入的對應的數據表中...

摘要:之前在項目中解決了插入字符串類型的數據,今天試著寫了一個插入date類型的字段,成功了,現在記錄一下,以便以后查看:

一:首先建立一個根據xml節點名稱獲取對應的xml值的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);--如果無該標簽,則返回EMPTYIF lenItme = 0 THENValueReturn := ' ';ELSE--獲取節點列表中的第1個item節點itemNode := xmldom.item (itemNodes, 0);--獲取所有子節點的值ValueReturn := xmldom.getNodeValue (xmldom.getFirstChild (itemNode));END IF;   --釋放domxmldom.freeDocument(xDoc);RETURN ValueReturn;END GetXmlNodeValue;
/


二:其次建立一個格式化字符串時間的Funcation.sql:

CREATE OR REPLACE FUNCTION MIP.FormatDateValue (key VARCHAR2, value VARCHAR2)RETURN VARCHAR2
IS--定義幾個變量,出來解析過來的時間字符串--日月年時分(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;--日月年時分(11OCT141017)ValueReturn := AA || YEAR || '-' || MOUNTH || '-' || DAY || ' ' || HOUR || ':' || MINUTE;--ValueReturn := HOUR || ':' || MINUTE;RETURN ValueReturn;END IF;END FormatDateValue;
/


三:建立插入數據表的存儲過程.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;
/


四:建立行級觸發器.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;
/

五:給其中的原始數據表插入一條數據,查看是否解析成功并插入到對應的表中:

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;

六:查看對應的數據表中時間類型的字段是否有值:



本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/443470.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443470.shtml
英文地址,請注明出處:http://en.pswp.cn/news/443470.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Oracle中通過Job實現定時同步兩個數據表之間的數據

摘要&#xff1a;之前項目中用的觸發器來實現數據解析&#xff0c;但是最近客戶反應&#xff0c;會報錯&#xff0c;所以我們從新設計了一下&#xff0c;通過Oracle里面的Job來解決這一問題&#xff0c;這樣就不會對原來的數據表做操作&#xff0c;只對臨時表操作&#xff0c;就…

學習筆記1-Linux1

Linux系統介紹 Linux管理硬盤的能力很強&#xff0c;我們一般只看到一個分區 / 根目錄 /bin 存儲系統命令 /dev 設備文件 /media 多媒體文件&#xff0c;U盤&#xff0c;光盤&#xff0c;共享文件夾 /proc 記錄程序運行時的資源使用情況 /sbin 存儲超級管理員使用的系統…

學習筆記2-Linux2

Ubuntu系統快捷鍵 ctrlaltt&#xff1a;打開終端 ctrll&#xff1a; 清屏 ctrlalt方向鍵&#xff1a;快速切換工作區域 tab&#xff1a;自動補全 up/down&#xff1a;調出指令執行記錄 alttab&#xff1a;切換任務重定向、管道、通配符 重定向重定向就是把命令的執行結果…

學習筆記3-C語言-基礎

C語言簡介 發展史&#xff1a;BCPL -> new B -> C -> Minix -> Linux -> gcc C語言誕生&#xff1a; 1970年~1973年&#xff0c;在肯.湯姆遜和丹尼斯.里奇(影響大)主導下編寫完成&#xff0c;歸屬美國貝爾實驗室 C語言的誕生專門用于編寫操作系統&#xf…

學習筆記4-C語言-開關、循環、跳轉

一、開關語句 switch(n) //n可以是數值、表達式&#xff0c;運算結果必須是整型 {case val: //必須是常量&#xff0c;如果val等于n&#xff0c;則打開開關...;break; //關閉執行開關&#xff0c;switch中不能與continue配合使用//如果所有的case后面都有…

JQuery,ajax異步加載selectoption/option/select多選框:

摘要&#xff1a;最近項目中用到了jquery&#xff0c;ajax&#xff0c;由于很長時間沒用了&#xff0c;所以這次做花了很多時間&#xff0c;現在記錄一下&#xff0c;方便以后回憶&#xff1a; 一&#xff1a;js文件&#xff1a; <script type"text/javascript"&…

學習筆記5-C語言-數組

數組&#xff1a; 什么是數組&#xff1a; 相同類型變量的組合,是一種批量定義變量的方式 定義&#xff1a; 類型 數組名[數組變量數量]&#xff1b;int arr[5]; 使用&#xff1a;數組名[下標]&#xff1b;arr[0];數組下標從零開始&#xff0c;范圍&#xff1a;0~數量-1 遍歷…

學習筆記6-小項目-走迷宮、推箱子

獲取方向鍵的功能&#xff1a;使用getch.h頭文件中的getch函數 1、把windows中的getch.h頭文件放到共享文件夾中 2、終端輸入 cd /media/sf_GONGXIANG進入共享文件夾 3、sudo cp getch.h /usr/include 4、cd /usr/include/ 5、sudo chmod r getch.h頭文件中的getch函數 time.h…

學習筆記7-C語言-進制轉換、原返補、位運算、函數

進制轉換 為什么要使用二、八進制、十六進制&#xff1f;因為現在的CPU只能識別高低兩種電流&#xff0c;因此只能對二進制數據進行運算二進制數據雖然可以直接被cpu識別&#xff0c;但不方便人們書寫、記錄&#xff0c;所以把二進制數據轉換成八進制是為了方便記錄在文件中。…

學習筆記8-作業

作業1&#xff1a;實現一個函數&#xff0c;判斷一個整數是否是素數&#xff0c;調用該函數來顯示出100~10000之間的所有素數 #include<stdio.h> #include<stdbool.h> #include<math.h> bool is_sushu(int num) {for(int i2;i<sqrt(num);i){if(num%i0)re…

學習筆記9-C語言-傳參、類型限定符、遞歸

函數傳參&#xff1a; 1、形參變量屬于它所在的函數&#xff0c;出了該函數就不能使用 2、實參與形參之間都是以賦值的形式進行數據傳遞&#xff08;值傳遞&#xff09; 3、return 其實是把返回值數據放置到一個公共的區域&#xff08;函數和函數調用者&#xff09;&#xff0…

Oracle創建視圖實現獲取當前數據所在的頁數,這里以每頁2條數據分頁

摘要&#xff1a;Oracle創建視圖實現獲取當前數據所在的頁數&#xff0c;這里以每頁2條數據分頁&#xff0c;詳細請看&#xff1a; 一&#xff1a; DROP VIEW MIP.TB_CMS_FLGTINFO_D_VIEW;/* Formatted on 2014/12/4 8:35:36 (QP5 v5.115.810.9015) */ CREATE OR REPLACE FOR…

學習筆記10-C語言-小項目-五子棋

小項目&#xff1a; 需要的數據 1、定義棋盤的二維數組 2、定義變量用于記錄下棋的坐標 3、定義角色 黑棋 O 白棋 * 空位業務邏輯&#xff1a; 是否需要對數據初始化 for(;;) {1、清屏、顯示棋盤2、落子坐標是否合法、該位置是否有棋子3、判斷是否五子連珠4、交換角色5、顯示…

學習筆記11-C語言-指針

什么是指針&#xff1a; 指針是一種特護的數據類型&#xff0c;使用它可以定義指針變量&#xff0c;指針變量存儲的是整型數據&#xff0c;代表內存的編號&#xff0c;通過這個編號可以訪問到對應內存。為什么使用指針 1、函數與函數之間是相互獨立的&#xff0c;但是有些時候…

學習筆記12-C語言-堆內存、字符串

什么是堆內存&#xff1a; 是進程中的一個內存段&#xff08;text\data\bss\heap\stack&#xff09;&#xff0c;由程序猿手動控制。 特點是足夠大&#xff0c;缺點是使用麻煩為什么要使用堆內存&#xff1a; 1、隨著程序的復雜&#xff0c;數據會越來越多。 2、其他的內存段…

學習筆記13-C語言-字符串函數、緩沖區

字符串的常用函數: #include<string.h> size_t strlen(const char* s); 功能&#xff1a;計算字符串長度&#xff0c;但是結果不包括\0 返回值&#xff1a;返回字符串中字符的個數size_t str_len(const char* str) {assert(NULL ! str);const char* tmp str;while(*tmp…

Oracle數據庫里面查詢字符串類型的字段不為空和為空的SQL語句:

摘要&#xff1a;近期項目中&#xff0c;在做高級查詢的時候有個條件是根據選擇的字段&#xff0c;然后再選擇字段的值為空和不為空做查詢&#xff0c;在寫SQL語句的時候費了很長時間&#xff0c;現在記錄一下&#xff0c;方便日后查看&#xff1a; 一&#xff1a;查詢字符串類…

學習筆記14-C語言-小項目-通訊錄

通訊錄&#xff1a; 要求&#xff1a; 姓名&#xff0c;性別、電話&#xff0c;最多儲存50個聯系人 功能&#xff1a;1、添加聯系人2、按名字刪除聯系人3、按姓名修改聯系人信息4、查找聯系人&#xff0c;可通過電話&#xff0c;名字查找&#xff0c;支持模糊查找5、顯示所有聯…

學習筆記15-C語言-預處理指令、條件編譯、頭文件

預處理指令&#xff1a; 程序猿編寫的代碼不是標準C代碼&#xff0c;并不能被真正的編譯器索編譯&#xff0c;需要一段程序把代碼翻譯一下。 翻譯的過程叫做預處理&#xff0c;被翻譯的代碼叫做預處理指令&#xff0c;以#開頭的都是預處理指令查看預處理的過程&#xff1a;gcc…

學習筆記16-C語言-小項目-使用Makefile完成2048

Makefile: Makefile是一系列編譯指令組成的可執行文本&#xff0c;也叫做編譯腳本。 在終端執行make命令會自動執行Makefile腳本中的編譯命令&#xff0c; 而且它還可以根據文件的最后修改時間來判斷哪些文件是否需要重新編譯、哪些文件不需要重新編譯&#xff0c;從而大大提高…