SQL Loader问题

时间:2010-12-06 01:37:46

标签: sql xml oracle sql-loader

我尝试通过SQL Loader从XML文件加载到Oracle的某些列为空。例如,可能有几个已填充,但偶尔会有一些空值。

如何判断SQL * Loader是否有些数据为null,或者我如何处理空值?

2 个答案:

答案 0 :(得分:1)

像jonearles建议的那样。我使用XMLTABLE将XML数据插入关系表。首先将XML数据放入Oracle表XMLTYPE列:

DROP TABLE XMLTEST;

CREATE TABLE XMLTEST
(   XML_COL XMLTYPE);

DECLARE
  poXML CLOB; 
BEGIN   
  -- Store the Purchase Order XML in the CLOB variable
  poXML := '<?xml version="1.0"?>
<zalen>
    <zaal zaal_id="1">
        <alt_id>88</alt_id>
        <display_naam>01 West 430</display_naam>
        <alt_db>exp_BB</alt_db>
    </zaal>
    <zaal zaal_id="2">
        <alt_id>170</alt_id>
        <display_naam>02 Midden 010</display_naam>
        <alt_db>exp_BB</alt_db>
    </zaal>
    <zaal zaal_id="3">
        <alt_id>173</alt_id>
        <display_naam>02 Midden 110</display_naam>
        <alt_db>exp_BB</alt_db>
    </zaal>
    <zaal zaal_id="4">
        <syl_id>F491B0A119DABE76B2F6B2C0A3E902F6</syl_id>
        <alt_id>183</alt_id>
        <display_naam>02 Oost 010</display_naam>
        <alt_db>exp_BB</alt_db>
    </zaal>
    <zaal zaal_id="5">
        <alt_id>172</alt_id>
        <display_naam>02 Oost 300</display_naam>
        <alt_db>exp_BB</alt_db>
    </zaal>
  .
  .
  .
    <zaal zaal_id="126">
        <syl_id>F491B0A119DABE76B2F6B2C0A3E901E3</syl_id>
        <alt_id>129</alt_id>
        <display_naam>HB.02.140</display_naam>
        <alt_db>exp_EE</alt_db>
    </zaal>
</zalen>';

  INSERT INTO xmltest (xml_col) VALUES (XMLTYPE(poXML));

END;
/

使用XMLTable函数创建(或插入)表:

drop table zalen;
create table zalen as 
select xt.zaal_id
,      xt.alt_id
,      xt.syl_id
,      xt.alt_db
,      xt.display_naam
from xmltest xts
,    XMLTable('zalen/zaal' PASSING xts.xml_col 
                   columns zaal_id INTEGER PATH '@zaal_id'
                             ,alt_id INTEGER PATH 'alt_id'
                             ,syl_id VARCHAR2(100) PATH 'syl_id'
                             ,display_naam VARCHAR2(100)PATH 'display_naam'
                             ,alt_db VARCHAR2(100)PATH 'alt_db') xt;

答案 1 :(得分:0)

您可能想要重新考虑加载和转换文件的方式。我假设这与your other question有关,在这种情况下,看起来你正在构建自己的XML解析器。 Oracle提供了一些工具来帮助您完成此任务。

首先,只是要加载文件,您可以use SQL*Loader to load the data as an XMLType,或者您可以使用类似DBMS_XSLPROCESSOR.READ2CLOB的内容将文件作为CLOB读取,然后将其转换为XMLType。

将其作为XMLType加载后,您可以使用PL / SQL过程使用XPath迭代值并将它们插入表中。

可能还有其他一些方法可以做到。

我确信这些想法都不像你希望的那么容易。正确处理XML要比SQL * Loader通常用于加载分隔文件要复杂得多 -