Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 XML  [new]
RADDIM
Member

Откуда: Казахстан, Алматы
Сообщений: 109
Имеем следующий XML файл
<NegativeData name="NegativeData" title="NEGATIVE DATA - CURRENT AND HISTORICAL">
  <NegativeStatus type="current" typeTitle="Current">
    <NegativeStatusOfClient>
      <NegativeStatusOfClient title="Negative Status of the Client" value=""/>
      <RegistrationDate title="Date of Registration" value="28/02/2006"/>
    </NegativeStatusOfClient>
    <NegativeStatusOfContract>
      <NegativeStatusOfContract title="Negative Status of the Contract" id="1" value="Standard Credits"/>
      <RegistrationDate title="Date of Registration" value="28/02/2006"/>
    </NegativeStatusOfContract>
  </NegativeStatus>
  <NegativeStatus type="historical" typeTitle="Historical">
    <NegativeStatusOfContract>
      <NegativeStatusOfContract title="Negative Status of the Contract" id="10" value="Contract Status Is Not Negative"/>
      <RegistrationDate title="Date of Registration" value="20/07/2007"/>
    </NegativeStatusOfContract>
    <NegativeStatusOfContract>
      <NegativeStatusOfContract title="Negative Status of the Contract" id="1" value="Standard Credits"/>
      <RegistrationDate title="Date of Registration" value="04/03/2008"/>
    </NegativeStatusOfContract>
  </NegativeStatus>
</NegativeData>

Как видно в этом XML файле есть 2 типа Current и Historical
  <NegativeStatus type="current" typeTitle="Current">
    <NegativeStatusOfClient>
      <NegativeStatusOfClient title="Negative Status of the Client" value=""/>
      <RegistrationDate title="Date of Registration" value="28/02/2006"/>
    </NegativeStatusOfClient>
    <NegativeStatusOfContract>
      <NegativeStatusOfContract title="Negative Status of the Contract" id="1" value="Standard Credits"/>
      <RegistrationDate title="Date of Registration" value="28/02/2006"/>
    </NegativeStatusOfContract>
  </NegativeStatus>
  <NegativeStatus type="historical" typeTitle="Historical">
    <NegativeStatusOfContract>
      <NegativeStatusOfContract title="Negative Status of the Contract" id="10" value="Contract Status Is Not Negative"/>
      <RegistrationDate title="Date of Registration" value="20/07/2007"/>
    </NegativeStatusOfContract>
    <NegativeStatusOfContract>
      <NegativeStatusOfContract title="Negative Status of the Contract" id="1" value="Standard Credits"/>
      <RegistrationDate title="Date of Registration" value="04/03/2008"/>
    </NegativeStatusOfContract>
  </NegativeStatus>

Мне надо чтобы мой скрипт делал инсерты в таблицу из этого файла следующим образом
1 строка
Current - Negative Status of the Client - 28/02/2006
2 строка
Current - Negative Status of the Contract - 28/02/2006
3 строка
Historical - Negative Status of the Contract - 20/07/2007
4 строка
Historical - Negative Status of the Contract - 04/03/2008

Вот как я пытаюсь это сделать. Но это не работает. Он не правильно делает инсерты. В данном случае он создает всего 2 строки один на Negative Status of the Client и один общий на Negative Status of the Contract. Помогите пожалуйста.
INSERT INTO CBS_CB_NEGATIVE_DATA
   (STATUS, NEGATIVE_STATUS_TITLE, NEGATIVE_STATUS, REGISTRATION_DATE)
   SELECT extract(value(subject),'//NegativeStatus/@typeTitle').getstringval(),
	extract(value(subject),'//NegativeStatus/NegativeStatusOfClient/NegativeStatusOfClient/@title').getstringval(),
    extract(value(subject),'//NegativeStatus/NegativeStatusOfClient/NegativeStatusOfClient/@value').getstringval(),
    TO_DATE(extract(value(subject),'//NegativeStatus/NegativeStatusOfClient/RegistrationDate/@value').getstringval(),'dd/mm/yyyy')
   FROM TABLE(XMLSequence(XMLType(temp_var).extract('//NegativeData/NegativeStatus'))) subject;
   
   INSERT INTO CBS_CB_NEGATIVE_DATA
   (STATUS, NEGATIVE_STATUS_TITLE, NEGATIVE_STATUS, REGISTRATION_DATE)
   SELECT extract(value(subject),'//NegativeStatus/@typeTitle').getstringval(),
	extract(value(subject),'//NegativeStatus/NegativeStatusOfContract/NegativeStatusOfContract/@title').getstringval(),
    extract(value(subject),'//NegativeStatus/NegativeStatusOfContract/NegativeStatusOfContract/@value').getstringval(),
    TO_DATE(extract(value(subject),'//NegativeStatus/NegativeStatusOfContract/RegistrationDate/@value').getstringval(),'dd/mm/yyyy')
   FROM TABLE(XMLSequence(XMLType(temp_var).extract('//NegativeData/NegativeStatus'))) subject;
18 июн 08, 12:04    [5814285]     Ответить | Цитировать Сообщить модератору
 Re: XML  [new]
RADDIM
Member

Откуда: Казахстан, Алматы
Сообщений: 109
Что никто не может помочь?
18 июн 08, 15:17    [5815859]     Ответить | Цитировать Сообщить модератору
 Re: XML  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
RADDIM
Что никто не может помочь?

Полезная ссылка
18 июн 08, 15:43    [5816080]     Ответить | Цитировать Сообщить модератору
 Re: XML  [new]
RADDIM
Member

Откуда: Казахстан, Алматы
Сообщений: 109
Спасибо очень познавательно.

Какой скрипт (укажите на ошибку у меня если вам не трудно или дайте готовый скрипт) мне написать что бы он делал инсерт в 4 строки а не в 2 как сейчас.
Заранее спасибо.
18 июн 08, 16:06    [5816251]     Ответить | Цитировать Сообщить модератору
 Re: XML  [new]
Elic
Member

Откуда:
Сообщений: 29980
set feed 1
col status for a12
col negative_status_title for a32
col negative_status for a32

select
  t.column_value.extract('/*/@typeTitle') as status,
  t2.column_value.extract('/*/'||t2.column_value.getRootElement()||'/@title') as negative_status_title,
  t2.column_value.extract('/*/'||t2.column_value.getRootElement()||'/@value') as negative_status,
  to_date(t2.column_value.extract('/*/RegistrationDate/@value'),'dd/mm/yyyy') as registration_date
from table(XMLSequence(XMLType(
'<NegativeData name="NegativeData" title="NEGATIVE DATA - CURRENT AND HISTORICAL">
  <NegativeStatus type="current" typeTitle="Current">
    <NegativeStatusOfClient>
      <NegativeStatusOfClient title="Negative Status of the Client" value=""/>
      <RegistrationDate title="Date of Registration" value="28/02/2006"/>
    </NegativeStatusOfClient>
    <NegativeStatusOfContract>
      <NegativeStatusOfContract title="Negative Status of the Contract" id="1" value="Standard Credits"/>
      <RegistrationDate title="Date of Registration" value="28/02/2006"/>
    </NegativeStatusOfContract>
  </NegativeStatus>
  <NegativeStatus type="historical" typeTitle="Historical">
    <NegativeStatusOfContract>
      <NegativeStatusOfContract title="Negative Status of the Contract" id="10" value="Contract Status Is Not Negative"/>
      <RegistrationDate title="Date of Registration" value="20/07/2007"/>
    </NegativeStatusOfContract>
    <NegativeStatusOfContract>
      <NegativeStatusOfContract title="Negative Status of the Contract" id="1" value="Standard Credits"/>
      <RegistrationDate title="Date of Registration" value="04/03/2008"/>
    </NegativeStatusOfContract>
  </NegativeStatus>
</NegativeData>'
).extract('/NegativeData/NegativeStatus'))) t, table(XMLSequence(t.column_value.extract('/*/*'))) t2;


STATUS       NEGATIVE_STATUS_TITLE            NEGATIVE_STATUS                  REGISTRATION_DATE
------------ -------------------------------- -------------------------------- -----------------
Current      Negative Status of the Client                                     28.02.06 00:00:00
Current      Negative Status of the Contract  Standard Credits                 28.02.06 00:00:00
Historical   Negative Status of the Contract  Contract Status Is Not Negative  20.07.07 00:00:00
Historical   Negative Status of the Contract  Standard Credits                 04.03.08 00:00:00

4 rows selected.
18 июн 08, 16:38    [5816526]     Ответить | Цитировать Сообщить модератору
 Re: XML  [new]
givanov
Member

Откуда:
Сообщений: 757
Elic
...
Супер.
Снимаю шляпу.
18 июн 08, 17:02    [5816731]     Ответить | Цитировать Сообщить модератору
 Re: XML  [new]
RADDIM
Member

Откуда: Казахстан, Алматы
Сообщений: 109
Элик спасибо.

<TerminatedContracts name="TerminatedContracts" title="DETAILED INFORMATION - TERMINATED CONTRACTS">
  <Contract Currency="KZT" ContractType="Instalment" ContractTypeCode="Contract.Type .Instalment">
    <CodeOfContract title="Contract number" value="01000101493"/>
    <Collateral>
      <TypeOfGuarantee title="Type of Guarantee" value="Other Types of Guarantee"/>
      <ValueOfGuarantee title="Value of Guarantee" value="0.00 KZT"/>
      <AdditionalInformation title="" value=""/>
    </Collateral>
    <PaymentsCalendar>
      <Payment title="9/06" value="-"/>
      <Payment title="10/06" value="-"/>
      <Payment title="11/06" value="-"/>
      <Payment title="12/06" value="-"/>
      <Payment title="1/07" value="-"/>
      <Payment title="2/07" value="-"/>
      <Payment title="3/07" value="-"/>
      <Payment title="4/07" value="-"/>
      <Payment title="5/07" value="-"/>
      <Payment title="6/07" value="-"/>
      <Payment title="7/07" value="2"/>
      <Payment title="8/07" value="0"/>
    </PaymentsCalendar>
  </Contract>
  <Contract Currency="KZT" ContractType="Instalment" ContractTypeCode="Contract.Type .Instalment">
    <CodeOfContract title="Contract number" value="1058908-001_001-900-124"/>
    <Collateral>
      <TypeOfGuarantee title="Type of Guarantee" value="Other Types of Guarantee"/>
      <ValueOfGuarantee title="Value of Guarantee" value="55,555.00 KZT"/>
      <AdditionalInformation title="" value=""/>
    </Collateral>
    <PaymentsCalendar>
      <Payment title="5/07" value="-"/>
      <Payment title="6/07" value="-"/>
      <Payment title="7/07" value="-"/>
      <Payment title="8/07" value="-"/>
      <Payment title="9/07" value="-"/>
      <Payment title="10/07" value="-"/>
      <Payment title="11/07" value="-"/>
      <Payment title="12/07" value="-"/>
      <Payment title="1/08" value="-"/>
      <Payment title="2/08" value="0"/>
      <Payment title="3/08" value="0"/>
      <Payment title="4/08" value="-"/>
    </PaymentsCalendar>
  </Contract>
</TerminatedContracts>

Нужно написать скрипт который берет CodeOfContract value и потом идет ниже и берет Payment title и value. Для данного XMLа должно получится 24 записи. 12 записей на номер контракта 01000101493 и 12 записей на номер контракта 1058908-001_001-900-124. Заранее спасибо.
19 июн 08, 08:05    [5818589]     Ответить | Цитировать Сообщить модератору
 Re: XML  [new]
RADDIM
Member

Откуда: Казахстан, Алматы
Сообщений: 109
Всем спасибо. Элику очень признателен. Последний пост сделал сам.
19 июн 08, 08:13    [5818600]     Ответить | Цитировать Сообщить модератору
 Re: XML  [new]
ivr
Member

Откуда:
Сообщений: 5
А если не сложно, можно поделится решением последнего примера?
Большое спасибо, заранее.
22 авг 08, 12:01    [6097714]     Ответить | Цитировать Сообщить модератору
 Re: XML  [new]
RADDIM
Member

Откуда: Казахстан, Алматы
Сообщений: 109
ivr
А если не сложно, можно поделится решением последнего примера?
Большое спасибо, заранее.


Не сложно =). Пожалуйста

SELECT 
    t.column_value.extract('/*/CodeOfContract/@value').getStringVal() as code_contract,
    t2.column_value.extract(t2.column_value.getRootElement()||'/@title').getStringVal() as payment_title,
    t2.column_value.extract(t2.column_value.getRootElement()||'/@value').getStringVal() as payment_value
   FROM TABLE(XMLSequence(XMLType(
'<TerminatedContracts name="TerminatedContracts" title="DETAILED INFORMATION - TERMINATED CONTRACTS">
  <Contract Currency="KZT" ContractType="Instalment" ContractTypeCode="Contract.Type .Instalment">
    <CodeOfContract title="Contract number" value="01000101493"/>
    <Collateral>
      <TypeOfGuarantee title="Type of Guarantee" value="Other Types of Guarantee"/>
      <ValueOfGuarantee title="Value of Guarantee" value="0.00 KZT"/>
      <AdditionalInformation title="" value=""/>
    </Collateral>
    <PaymentsCalendar>
      <Payment title="9/06" value="-"/>
      <Payment title="10/06" value="-"/>
      <Payment title="11/06" value="-"/>
      <Payment title="12/06" value="-"/>
      <Payment title="1/07" value="-"/>
      <Payment title="2/07" value="-"/>
      <Payment title="3/07" value="-"/>
      <Payment title="4/07" value="-"/>
      <Payment title="5/07" value="-"/>
      <Payment title="6/07" value="-"/>
      <Payment title="7/07" value="2"/>
      <Payment title="8/07" value="0"/>
    </PaymentsCalendar>
  </Contract>
  <Contract Currency="KZT" ContractType="Instalment" ContractTypeCode="Contract.Type .Instalment">
    <CodeOfContract title="Contract number" value="1058908-001_001-900-124"/>
    <Collateral>
      <TypeOfGuarantee title="Type of Guarantee" value="Other Types of Guarantee"/>
      <ValueOfGuarantee title="Value of Guarantee" value="55,555.00 KZT"/>
      <AdditionalInformation title="" value=""/>
    </Collateral>
    <PaymentsCalendar>
      <Payment title="5/07" value="-"/>
      <Payment title="6/07" value="-"/>
      <Payment title="7/07" value="-"/>
      <Payment title="8/07" value="-"/>
      <Payment title="9/07" value="-"/>
      <Payment title="10/07" value="-"/>
      <Payment title="11/07" value="-"/>
      <Payment title="12/07" value="-"/>
      <Payment title="1/08" value="-"/>
      <Payment title="2/08" value="0"/>
      <Payment title="3/08" value="0"/>
      <Payment title="4/08" value="-"/>
    </PaymentsCalendar>
  </Contract>
</TerminatedContracts>'
).extract('//TerminatedContracts/Contract'))) t, TABLE(XMLSequence(t.column_value.extract('/*/PaymentsCalendar/*'))) t2;
22 авг 08, 16:11    [6099799]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить