oracle xml 中取时间的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle xml 中取时间的问题相关的知识,希望对你有一定的参考价值。

在开发过程中取 xml中的时间,然后插入date字段的字段 会报这个错误:ORA-01843: not a valid month 具体语句如下:INSERT INTO table_a(register_time)
SELECT a.xmlwhere.extract('/where/register_time/text()').getStringVal()FROM a ;使用 SELECT a.xmlwhere.extract('/where/register_time/text()').getStringVal()FROM a ; 查出来的信息为:'01-10月-09'请高手指点一下,是否在xmltype中取时间函数 是否用getStringVal() 可以实现

参考技术A 你好。
很幸运看到你的问题。
但是又很遗憾到现在还没有人回答你的问题。也可能你现在已经在别的地方找到了答案,那就得恭喜你啦。
可能是你问的问题有些专业了,没人会。或者别人没有遇到或者接触过你的问题,所以帮不了你。建议你去问题的相关论坛去求助,那里的人通常比较多,也比较热心,可能能快点帮你解决问题。
希望我的回答也能够帮到你!
祝你好运~!
参考技术B 需要进行时间格式转换.使用to_date()函数.例如 select to_date('01-10月-09','yy-mm"月"-dd') from dual

Oracle PL/SQL 加载 XML

【中文标题】Oracle PL/SQL 加载 XML【英文标题】:Oracle PL/SQL to Load XML 【发布时间】:2011-03-14 13:01:12 【问题描述】:

我不知道问这个问题的最佳方式,但让我解释一下这个问题,它可能会有所帮助。

我们目前有一个使用 Oracle OAI 中心分发给我们的数据源。使用 DBLink 将数据提供给我们。

信息提供者将升级到 Oracle ODI,并且出于多种原因要求所有数据传输都使用加密的 XML 文件通过 SFTP 进行。

现在这给我们作为数据接收者带来了一个新问题,因为我们现在需要修改我们的系统以将 XML 数据加载到曾经由 DBLinks 填充的表中。

我们目前的设置是:

Oracle 10g (10.2.0.4) Oracle 在 Unix (HP-UX) 上运行 众多 Win2k3 服务器控制接口/ETL 流。

因此,目前,OAI 中心会将数据放入我们 ETL 层中的多个表中。例如说“人”。我不认为这张表的结构是相关的......

当数据已加载到 PERSON 表中时,OAI 传递将向数据库发送一个文件结束标记,该标记存储在表“EOF”中 - 它保存了“PERSON”中预期的接收记录计数”。

windows 服务器有一个每 30 秒轮询一次的批处理,它会检查是否存在 EOF 记录,如果存在则开始我们的 ETL 处理。

如果可能的话,我想避免更改系统的这一部分,所以我提出的解决方案是解析新的 XML 文件并将它们加载到 Oracle 数据库中,问题是最好的方法是什么:

XML 文件将传送到 Windows 服务器 首选是使用 PL/SQL 加载数据

将数据加载到 Oracle (Unix) 数据库中的最佳方式是什么,源数据位于 Windows 端。

如果可能,我想避免使用任何 Unix 脚本 - 因为我的开发团队没有足够的 Unix 经验让他们松懈。

任何建议将不胜感激。

XML 格式如下 - 元素名称映射到 DB 上的列名称:

<PERSON>
  <HEADER>
    <Creator>~</Creator>
    <DigitalSigniture>~</DigitalSigniture>
    <Owner>~</Owner>
    <Title>~</Title>
    <Marking>~</Marking>
   </HEADER>

   <PERSONS>
     <EMPLOYEE_NUMBER>~</EMPLOYEE_NUMBER>
     <FIRST_NAME>~</FIRST_NAME>
     <LAST_NAME>~</LAST_NAME>
     ......
   </PERSONS>
<PERSON>

编辑: 我也知道数量,在正常(平均)一天我将处理大约 80,000 条 XML 记录,而在特殊的一天我将处理多达 300,000 条(通常每年一次)。

【问题讨论】:

【参考方案1】:

要粉碎您的 XML 并将它们加载到 Oracle 表中,您可以使用我在这篇博文中描述的技术:http://rwijk.blogspot.com/2010/03/shredding-xml-into-multiple-tables-in.html

问候, 抢。

加载文件的一些链接: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14259/xdb25loa.htm#ADXDB2900http://www.oracle-developer.net/display.php?id=416

【讨论】:

我不认为那是我真正想要达到的目标。对于我要加载的每个表,我将有一个新的 XML 文件。我担心的一件事是数量,在好的一天我将处理大约 80,000 条记录,在繁忙的一天大约 300,000 条。 那么单个 XML 文件一对一对应单个关系表?如果是这样,您会更加幸运,因为您可以执行单个“INSERT ... SELECT ... FROM XMLTABLE(...)”。还是我还缺少什么?对于这些卷,您肯定希望查看单个 SQL 语句,而不是进行 PL/SQL 处理... 没错,我认为我的问题更多 - 如何在第一个实例(unix)中将源数据(从 Windows)获取到数据库中......除非我可以使用 SQL 运行来做到这一点来自 Windows 盒子? 使用 SQL*Loader 或者可能是外部表将源 XML 推送到只有一个键和一个 CLOB 列的新表中怎么样。然后按照 Rob 的建议将其切碎到您的关系表中。 @Jim:我刚刚在我的答案中添加了一些与此内容完全相同的链接【参考方案2】:

我建议忘记内置的 Oracle XML 特性,使用任何普通语言在“客户端”处理 XML 文件并将准备使用的数据提交到数据库。 (寻找 Python 或 .NET)

如果您允许从网络访问数据库服务器文件系统,则可能存在安全风险。

每天 80 000 条记录对 Oracle 来说应该不是什么大问题。我们做的更接近实时。

【讨论】:

这也是可能的,但由于他有一个具有PL/SQL技能的开发团队,我认为使用Oracle XML特性对他们来说是最熟悉的。顺便说一句,我喜欢你的“任何普通语言”短语,虽然:-) 是的,这就是我的想法,我有一些 Java 开发人员可供我使用,.NET 是一个问题,因为我正在处理的限制性环境。 我正在开发相当大的系统,我们在公司内部使用它。大部分业务逻辑都在 PL/SQL 代码中。所以我可以说,我是一名 PL/SQL 开发人员。同时,所有前端和数据导入都是 vb.net(主要优势在于它与 Excel 很好地集成,我们将其用作数据的“浏览器”)我建议使用 Python 来处理数据。简单的语言,非常易于与 SQL 查询一起使用。我做了一个简单的测试:将相当多的数据上传到数据库。结果比在 .NET 中使用我们的“标准”方式要好得多。

以上是关于oracle xml 中取时间的问题的主要内容,如果未能解决你的问题,请参考以下文章

求oracle高手,存储过程中取游标值时,出现数据类型不一致问题,急急

oracle中取交集差集和并集的语法

怎样在oracle中取字符串的最后一个字符

Soapui 如何连接oracle,因为我去一些变量到数据库中取

大负十进制值在带有十进制类型的spark DataFrame中取整

oracle 物化视图