从 xml 插入到两个不同的表
insert from xml to two different tables
我想插入一个 xml 到 2 个不同的表格。
table是:
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>
元素 <Person>
应保存在与元素 <Versicherung>
不同的 table 中。可能是,一个人将拥有更多 <Versicherung>
个元素。
如何将信息插入到不同的 table 中?
取决于 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'
);
我想插入一个 xml 到 2 个不同的表格。
table是:
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>
元素 <Person>
应保存在与元素 <Versicherung>
不同的 table 中。可能是,一个人将拥有更多 <Versicherung>
个元素。
如何将信息插入到不同的 table 中?
取决于 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'
);