在SQL Server中,很容易解析包含由属性构造的简单XML片段的vachar变量,并将其加载到临时表中 - 请参阅下面的示例:
declare @UpdateXML VARCHAR(8000)
set @UpdateXML='<ArrayOfRecords>
<Record Field01="130" Field02="1700" Field03="C" />
<Record Field01="131" Field02="1701" Field03="C" />
<Record Field01="132" Field02="1702" Field03="C" />
</ArrayOfRecords>'
DECLARE @hdoc int
EXEC sp_xml_preparedocument @hdoc OUTPUT, @UpdateXML
INSERT
INTO #tblTemp(
[Field01],
[Field02],
[Field03]
)
SELECT *
FROM OPENXML(@hdoc, '//ArrayOfRecords/Record')
WITH ( Field01 int,
Field02 int,
Field03 char(1)
)
EXEC sp_xml_removedocument @hdoc
Run Code Online (Sandbox Code Playgroud)
是否有一个简单的示例在Oracle PL/SQL中与此相同?
在Oracle中有一个DBMS_XMLSTORE包,但它需要使用ROWSET和ROW元素的特定规范格式的XML片段.DBMS_XMLSTORE似乎不适用于XML属性.
此外,我不能100%确定是否需要创建XML片段的XSD并在我可以使用任何其他PL/SQL XML工具/查询之前在Oracle数据库上注册它.
谢谢!
请参阅下面的PL/SQL片段:
create table t23 (
field01 number,
field02 number,
field03 char(1)
);
Run Code Online (Sandbox Code Playgroud)
declare x varchar2(2000) := '
<ArrayOfRecords>
<Record>
<Field01>130</Field01>
<Field02>1700</Field02>
<Field03>C</Field03>
</Record>
<Record>
<Field01>131</Field01>
<Field02>1701</Field02>
<Field03>B</Field03>
</Record>
</ArrayOfRecords>';
begin
insert
into T23
SELECT *
FROM XMLTABLE('/ArrayOfRecords/Record'
PASSING xmltype(x)
COLUMNS
Field01 number PATH 'Field01',
Field02 number PATH 'Field02',
Field03 char(1) PATH 'Field03'
);
end;
-- The records will be here - great!
select * from T23;
Run Code Online (Sandbox Code Playgroud)
declare y varchar2(2000) := '
<ArrayOfRecords>
<Record Field01="130" Field02="1700" Field03="C" />
<Record …Run Code Online (Sandbox Code Playgroud)