【问题标题】:insert from xml to two different tables从 xml 插入两个不同的表
【发布时间】:2015-12-15 08:44:28
【问题描述】:

我想将 xml 插入到 2 个不同的表中。

这些表格是:

create table PersonUmfrage(
  PersonenId  INTEGER NOT NULL,
  Nachname    VARCHAR2 (30),
  Vorname     VARCHAR2 (30),
  PLZ         INTEGER,
  GebDat      DATE);

create table VersicherungUmfrage(
  PersonenId           INTEGER NOT NULL,
  Bezeichnung          VARCHAR2 (30),
  Wert                 INTEGER,
  monatlicher_Beitrag  NUMBER,
  Abschlussdatum       DATE,
  LaufzeitJahre        INTEGER);

xml内容:

<Versicherungsnehmer>
  <Person Bundesland="Oberösterreich">
    <Vorname>Reinhard</Vorname>
    <Nachname>Schütz</Nachname>
    <PLZ>4567</PLZ>
    <Geburtsdatum>1991-05-03</Geburtsdatum>

    <Versicherung>
        <Wert>20000</Wert>
        <monatlicher_Beitrag>60</monatlicher_Beitrag>
        <Abschlussdatum>1991-05-03</Abschlussdatum>
        <Laufzeit>25</Laufzeit>
    </Versicherung>
  </Person>
</Versicherungsnehmer>

元素&lt;Person&gt; 应与元素&lt;Versicherung&gt; 保存在不同的表中。一个人可能会有更多的&lt;Versicherung&gt; 元素。

如何将信息插入到不同的表中?

【问题讨论】:

标签: sql xml oracle sql-insert


【解决方案1】:

取决于PersonenId 的解析方式,但在 Oracle 中,您可以使用一个馈送查询插入到多个表中:

INSERT ALL
    WHEN ROWNUM = 1 THEN
        INTO PersonUmfrage (PersonenId, Nachname, Vorname, PLZ, GebDat) VALUES (PersonenId, Nachname, Vorname, PLZ, Geburtsdatum)
    WHEN 1 = 1 THEN
        INTO VersicherungUmfrage (PersonenId, Wert, monatlicher_Beitrag, Abschlussdatum, LaufzeitJahre) VALUES (PersonenId, Wert, monatlicher_Beitrag, Abschlussdatum, Laufzeit)
SELECT
    1 PersonenId, Vorname, Nachname, PLZ, Geburtsdatum, Wert, monatlicher_Beitrag, Abschlussdatum, Laufzeit
FROM
    XMLTABLE(
        'let $person := $DATA/Versicherungsnehmer/Person
         for $versicherung in $DATA/Versicherungsnehmer/Person/Versicherung
         return
            <data>
                {$person/Vorname}
                {$person/Nachname}
                {$person/PLZ}
                {$person/Geburtsdatum}
                {$versicherung/Wert}
                {$versicherung/monatlicher_Beitrag}
                {$versicherung/Abschlussdatum}
                {$versicherung/Laufzeit}
            </data>'
            PASSING
               XMLTYPE('<Versicherungsnehmer>
  <Person Bundesland="Oberösterreich">
    <Vorname>Reinhard</Vorname>
    <Nachname>Schütz</Nachname>
    <PLZ>4567</PLZ>
    <Geburtsdatum>1991-05-03</Geburtsdatum>

    <Versicherung>
        <Wert>20000</Wert>
        <monatlicher_Beitrag>60</monatlicher_Beitrag>
        <Abschlussdatum>1991-05-03</Abschlussdatum>
        <Laufzeit>25</Laufzeit>
    </Versicherung>
    <Versicherung>
        <Wert>20001</Wert>
        <monatlicher_Beitrag>61</monatlicher_Beitrag>
        <Abschlussdatum>1991-05-04</Abschlussdatum>
        <Laufzeit>26</Laufzeit>
    </Versicherung>
  </Person>
</Versicherungsnehmer>') AS data
            COLUMNS
                Vorname VARCHAR2(30) PATH 'Vorname',
                Nachname VARCHAR2(30) PATH 'Nachname',
                PLZ NUMBER PATH 'PLZ',
                Geburtsdatum DATE PATH 'Geburtsdatum',
                wert NUMBER PATH 'Wert',
                monatlicher_Beitrag NUMBER PATH 'monatlicher_Beitrag',
                Abschlussdatum DATE PATH 'Abschlussdatum',
                Laufzeit NUMBER PATH 'Laufzeit'
    );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多