<DATA>
<CUSTOMER>
<BASIC_INFO>
<F_NAME>TOM<F_NAME>
<M_NAME>AND<M_NAME>
<L_NAME>HANKS<L_NAME>
</BASIC_INFO>
<ADDITIONAL_INFO>
<EMAIL>TOM.HANKS@GMAIL.COM</EMAIL>
<PHONE_NO>22211132</PHONE_NO>
</ADDITIONAL_INFO>
</CUSTOMER>
<CUSTOMER>
<BASIC_INFO>
<F_NAME>TOM<F_NAME>
<L_NAME>HANKS<L_NAME>
</BASIC_INFO>
<ADDITIONAL_INFO>
<EMAIL>TOM.HANKS@GMAIL.COM</EMAIL>
</ADDITIONAL_INFO>
</CUSTOMER>
<CUSTOMER>
<BASIC_INFO>
<F_NAME>TOM<F_NAME>
</BASIC_INFO>
<ADDITIONAL_INFO>
<PHONE_NO>22211132</PHONE_NO>
</ADDITIONAL_INFO>
</CUSTOMER>
我想在表格中存储客户信息,其中的列为F_NAME,M_NAME,L_NAME,PHONE_NO,EMAIL,每个值都应列在相应的列中
现在需要注意的是,对于那些不存在某些信息的客户,不应插入表格中的值。
答案 0 :(得分:1)
您可以分两步完成。
首先创建数据的关系表示:
来自sql-plsql-de.blogspot.co.at的示例:
create table xmltest (
dokument xmltype
)
/
insert into xmltest values (xmltype(
'<blog>
<name>SQL und PL/SQL</name>
<autor>Carsten Czarski</autor>
<themen>
<thema>XML</thema>
<thema>PL/SQL</thema>
</themen>
</blog>'
))
/
本声明:
select
extractvalue(dokument, '/blog/name') as blog_name,
extractvalue(dokument, '/blog/autor') as blog_autor,
extractvalue(value(thema), '/thema/text()') as thema
from xmltest,
table(xmlsequence(extract(dokument, '/blog/themen/thema'))) thema
/
Re sluts in:
BLOG_NAME BLOG_AUTOR THEMA
-------------------- --------------- --------------------
SQL und PL/SQL Carsten Czarski XML
SQL und PL/SQL Carsten Czarski PL/SQL
现在你以关系的方式拥有它,你可以循环它:
for cur in (select * from ...)
loop
if cur.column_a is not null then
--insert
end if;
end loop;
这很慢但即使你有复杂的规则也能保持可读性。 或者,您可以使用“普通”SQL或合并语句。