Проблема с загрузчиком SQL - PullRequest
1 голос
/ 06 декабря 2010

Некоторые из столбцов, которые я пытаюсь загрузить в Oracle через SQL Loader из файла XML, имеют нулевое значение. Например, может иметь несколько заполненных, но иногда он имеет несколько нулей.

Как я могу сказать загрузчику SQL *, что некоторые данные будут нулевыми, или как я могу иметь дело с нулями?

Ответы [ 2 ]

1 голос
/ 06 декабря 2010

Как предложено Джонаром. Я использую XMLTABLE для вставки данных XML в реляционные таблицы. Сначала поместите данные XML в столбец XMLTYPE таблиц Oracle:

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;
0 голосов
/ 06 декабря 2010

Возможно, вы захотите переосмыслить способ загрузки и преобразования файлов.Я предполагаю, что это связано с другим вашим вопросом , и в этом случае похоже, что вы создаете свой собственный анализатор XML.Oracle предоставляет некоторые инструменты, которые помогут вам сделать это.

Во-первых, просто для загрузки файла вы можете либо использовать SQL * Loader для загрузки данных в виде XMLType , либо использовать что-то другоенапример, DBMS_XSLPROCESSOR.READ2CLOB, чтобы прочитать файл как CLOB, а затем преобразовать его в XMLType.

После загрузки в качестве XMLType вы можете использовать процедуру PL / SQL, которая использует XPath дляпереберите значения и вставьте их в таблицу.

И, возможно, есть и другие способы сделать это.

Я уверен, что ни одна из этих идей не так проста, как вынадеясь на.Корректная обработка XML намного сложнее, чем обычно используется SQL * Loader - загрузка файлов с разделителями.

...