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.mzph.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;从而大大提高…