将Xml数据插入表

时间:2019-02-01 12:09:01

标签: sql oracle sql-insert common-table-expression

我正在尝试使用Oracle的SQL Developer将XmlType变量中的数据插入表中。

我还是Oracle的新手。我正在尝试使用XML将XML数据从SQL Server数据库传递到Oracle。

我已经尝试了Stack Overflow和其他站点提供的许多解决方案,但似乎都无法正常工作。

以下内容基于我确实在Stack Overflow上找到的解决方案。我在Oracles SQL Developer上运行它:

with sample_data as (select xmltype(
'<People>
   <Person>
       <ID>PP11</ID>
   </Person>
   <Person>
       <ID>PP22</ID>
    </Person>
</People>') xml_data from dual) 

--INSERT INTO Person (ID)
select x.ID
from   sample_data sd
   cross join xmltable('/People/Person'
                       passing sd.xml_data
                       columns ID varchar2(20) path 'ID') x;

请注意,Insert Into语句已被注释掉。

如果直接在SQL Developer中运行它,则会得到:

ID                  
--------------------
PP11
PP22

如果我包含Insert into语句,我将得到:

Error starting at line : 2 in command -
with sample_data as (select xmltype(
'<People>
    <Person>
        <ID>PP11</ID>
    </Person>
    <Person>
       <ID>PP22</ID>
    </Person>
  </People>') xml_data from dual) 

INSERT INTO Person (ID)
select x.ID
from   sample_data sd
   cross join xmltable('/People/Person'
                       passing sd.xml_data
                       columns ID varchar2(20) path 'ID') x
Error at Command Line : 12 Column : 1
Error report -
SQL Error: ORA-00928: missing SELECT keyword
00928. 00000 -  "missing SELECT keyword"
*Cause:    
*Action:

谁能告诉我我在做什么错!我已经使用SQL Server做到了这一点,因此希望Oracle能够做到这一点,所以我必须缺少明显的东西!

2 个答案:

答案 0 :(得分:1)

我认为正确的顺序是:

INSERT INTO Person (ID)
with sample_data as (select xmltype(
'<People>
    <Person>
        <ID>PP11</ID>
    </Person>
    <Person>
       <ID>PP22</ID>
    </Person>
  </People>') xml_data from dual) 
select x.ID
from   sample_data sd
   cross join xmltable('/People/Person'
                       passing sd.xml_data
                       columns ID varchar2(20) path 'ID') x

答案 1 :(得分:0)

非常感谢您的回复。我无法测试它,因为SQL Developer无法再次使用!它正在工作,我犯了关闭它的错误,现在它现在无法连接到Oracle XE!话虽如此,但我确实确实犯了一个简单的错误,并且我确信一旦我使SQL Developer再次正常工作,一切都会好起来的。 TVM!