摘要:之前在项目中解决了插入字符串类型的数据,今天试着写了一个插入date类型的字段,成功了,现在记录一下,以便以后查看:
一:首先建立一个根据xml节点名称获取对应的xml值的Function.sql:
CREATE OR REPLACE FUNCTION MIP.GetXmlNodeValue (xmlStr CLOB, nodeName VARCHAR2)
RETURN VARCHAR2
IS
--创建xml解析器实例xmlparser.Parser
xmlPar 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);
--如果无该标签,则返回EMPTY
IF lenItme = 0 THEN
ValueReturn := ' ';
ELSE
--获取节点列表中的第1个item节点
itemNode := xmldom.item (itemNodes, 0);
--获取所有子节点的值
ValueReturn := xmldom.getNodeValue (xmldom.getFirstChild (itemNode));
END IF;
--释放dom
xmldom.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);
BEGIN
IF key = ' ' THEN
ValueReturn := ' ';
RETURN ValueReturn;
ELSE
DAY := SUBSTR(key,0,2);
MOUNTH := SUBSTR(key,3,3);
IF INSTR (MOUNTH,'JAN') > 0 THEN
MOUNTH := 01;
END IF;
IF INSTR (MOUNTH,'FEB') > 0 THEN
MOUNTH := 02;
END IF;
IF INSTR (MOUNTH,'MAR') > 0 THEN
MOUNTH := 03;
END IF;
IF INSTR (MOUNTH,'APR') > 0 THEN
MOUNTH := 04;
END IF;
IF INSTR (MOUNTH,'MAY') > 0 THEN
MOUNTH := 05;
END IF;
IF INSTR (MOUNTH,'JUN') > 0 THEN
MOUNTH := 06;
END IF;
IF INSTR (MOUNTH,'JUL') > 0 THEN
MOUNTH := 07;
END IF;
IF INSTR (MOUNTH,'AUG') > 0 THEN
MOUNTH := 08;
END IF;
IF INSTR (MOUNTH,'SEP') > 0 THEN
MOUNTH := 09;
END IF;
IF INSTR (MOUNTH,'OCT') > 0 THEN
MOUNTH := 10;
END IF;
IF INSTR (MOUNTH,'NOV') > 0 THEN
MOUNTH := 11;
END IF;
IF INSTR (MOUNTH,'DEC') > 0 THEN
MOUNTH := 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)
IS
TIME 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;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE (SQLERRM);
END PRO_TEST;
/
四:建立行级触发器.sql:
DROP TRIGGER MIP.COPY_TEST_TRIGGER;
CREATE OR REPLACE TRIGGER MIP.COPY_TEST_TRIGGER
AFTER INSERT
ON MIP.MBINMSGS FOR EACH ROW
DECLARE
-- LOCAL VARIABLES HERE
BEGIN
PRO_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;
六:查看对应的数据表中时间类型的字段是否有值:
分享到:
相关推荐
15.5.2 Oracle中存储过程和函数的管理 第16章 SQL触发器 16.1 触发器的基本概念 16.1.1 触发器简介 16.1.2 触发器执行环境 16.2 SQL Server中的触发器 16.2.1 SQL Server触发器的种类 16.2.2 ...
用表格显示 SELECT 语句的查询结果,可以直接对查询结果进行再操作,如 修改、插入行、删除行、提交(将表格中的数据改变写入相应的数据库表中)、多功能拷贝、导出为 INSERT 语句、单条记录操作、方便的查找及替换...
将 SELECT 语句的查询结果显示在工作表,可以直接对查询结果进行再操作,如 修改、插入行、删除行、提 交(将表格中的数据改变写入相应的数据库表中)、多功能拷贝、将选择的单元格数据导出为 XLS /CSV /INSERT SQL ...
15.5.2 oracle中存储过程和函数的管理 324 第16章 sql触发器 325 16.1 触发器的基本概念 325 16.1.1 触发器简介 325 16.1.2 触发器执行环境 325 16.2 sql server中的触发器 326 16.2.1 sql server触发器的种类...
2.向表中插入空值 40 3.从其它表中拷贝数据 40 二. 更新数据 41 三. 删除数据 42 1.Delete 语句 42 2.Truncate 语句 42 四. SQL*Plus命令 42 1.设置环境变量命令 42 (1)Pause 43 (2)pagesize 和 newpage 43 ...
将 SELECT 语句的查询结果显示在工作表,可以直接对查询结果进行再操作,如 修改、 插入行、删除行、提交(将表格中的数据改变写入相应的数据库表中)、多功能拷贝、将选 择的单元格数据导出为 XLS /CSV /INSERT SQL...
能查看、编辑大型的文本字段(如 CLOB, LONG) <2> 运行命令 "desc tablename" 能清楚地显示表的所有列(包括名称、数据类型及长度、默认值、非空)、所有的索引、所有的约束条件(主键、唯一键、检查键、子表、外键...
实例244 将文本文件中数据存储到数据库中 316 4.5 文件的压缩与解压 318 实例245 PHP中压缩RAR文件 319 实例246 PHP中将上传文件转换成RAR文件 320 实例247 PHP中对RAR文件进行解压 321 实例248 PHP中压缩ZIP文件 ...
实例244 将文本文件中数据存储到数据库中 316 4.5 文件的压缩与解压 318 实例245 PHP中压缩RAR文件 319 实例246 PHP中将上传文件转换成RAR文件 320 实例247 PHP中对RAR文件进行解压 321 实例248 PHP中压缩ZIP文件 ...
" "REAL、FLOAT、INTEGER、NUEBER "Oracle数据库必须使用NUEBER " "NUMBER(P,S)、NUMERIC (P, "Oracle数据库必须使用NUMBER " "S)、DECIMAL (P, S) " " "DATE "时间类型必须使用DATE " "BLOB(二进制数据)、CLOB...
物理设计 5 5.1 表设计 5 5.1.1 表汇总 5 5.1.2 各表的详细设计 5 5.2 视图设计 16 5.3 触发器设计 17 5.4 存储过程设计 17 5.5 Sequences设计 17 5.5.1 Sequences汇总 17 6. 安全性设计 17 引言 1 目的 根据概要...
变量声明与赋值 PL/SQL主要用于数据库编程,所以其所有的数据类型跟Oracle数据库里的字段类型是一一对应的,大体分为数字型、布尔型、字符型和日期型。这里简单介绍两种常用数据类型:number、varchar2。 number ...
MySQL中外键的table的外键引用列可以插入数据可以为null,不参照主表的数据。 使用子查询插入数据 insert into temp(name) select name from classes; 多行插入 insert into temp values(null, ‘jack’, 22), ...
PL/SQL主要用于数据库编程,所以其所有的数据类型跟Oracle数据库里的字段类型是一一对应的,大体分为数字型、布尔型、字符型和日期型。这里简单介绍两种常用数据类型:number、varchar2。 number 用来存储整数和...
46、java 中实现多态的机制是什么? 12 47、在java 中一个类被声明为final 类型,表示了什么意思? 12 48、下面哪些类可以被继承? 12 49、指出下面程序的运行结果: 【基础】 13 52、关于内部类: 13 53、数据类型...
46、java 中实现多态的机制是什么? 12 47、在java 中一个类被声明为final 类型,表示了什么意思? 12 48、下面哪些类可以被继承? 12 49、指出下面程序的运行结果: 【基础】 13 52、关于内部类: 13 53、数据类型...
-- 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba --然后,解除对scott用户的锁 alter user scott account unlock; --那么这个用户名就能使用了。 --(默认全局数据库名orcl) 1、...