XMLファイルからSQLローダーを介してOracleにロードしようとしている列の一部がnullです。例えば、いくつかの項目がありますが、いくつかのnullがあります。SQLローダーの問題
データの一部がNULLになることをSQL * Loaderに通知するにはどうすればよいですか、またはNULLをどのように処理できますか?
XMLファイルからSQLローダーを介してOracleにロードしようとしている列の一部がnullです。例えば、いくつかの項目がありますが、いくつかのnullがあります。SQLローダーの問題
データの一部がNULLになることをSQL * Loaderに通知するにはどうすればよいですか、またはNULLをどのように処理できますか?
jonearlesが推奨するように。 XMLTABLEを使用してXMLデータをリレーショナル表に挿入します。作成(または挿入)する
DROP TABLE XMLTEST;
CREATE TABLE XMLTEST
( XML_COL XMLTYPE);
DECLARE
poXML CLOB;
BEGIN
-- Store the Purchase Order XML in the CLOB variable
poXML := '<?xml version="1.0"?>
<zalen>
<zaal zaal_id="1">
<alt_id>88</alt_id>
<display_naam>01 West 430</display_naam>
<alt_db>exp_BB</alt_db>
</zaal>
<zaal zaal_id="2">
<alt_id>170</alt_id>
<display_naam>02 Midden 010</display_naam>
<alt_db>exp_BB</alt_db>
</zaal>
<zaal zaal_id="3">
<alt_id>173</alt_id>
<display_naam>02 Midden 110</display_naam>
<alt_db>exp_BB</alt_db>
</zaal>
<zaal zaal_id="4">
<syl_id>F491B0A119DABE76B2F6B2C0A3E902F6</syl_id>
<alt_id>183</alt_id>
<display_naam>02 Oost 010</display_naam>
<alt_db>exp_BB</alt_db>
</zaal>
<zaal zaal_id="5">
<alt_id>172</alt_id>
<display_naam>02 Oost 300</display_naam>
<alt_db>exp_BB</alt_db>
</zaal>
.
.
.
<zaal zaal_id="126">
<syl_id>F491B0A119DABE76B2F6B2C0A3E901E3</syl_id>
<alt_id>129</alt_id>
<display_naam>HB.02.140</display_naam>
<alt_db>exp_EE</alt_db>
</zaal>
</zalen>';
INSERT INTO xmltest (xml_col) VALUES (XMLTYPE(poXML));
END;
/
使用XMLTABLE関数テーブルを:まずOracle表のXMLType列にXMLデータを入れ
drop table zalen;
create table zalen as
select xt.zaal_id
, xt.alt_id
, xt.syl_id
, xt.alt_db
, xt.display_naam
from xmltest xts
, XMLTable('zalen/zaal' PASSING xts.xml_col
columns zaal_id INTEGER PATH '@zaal_id'
,alt_id INTEGER PATH 'alt_id'
,syl_id VARCHAR2(100) PATH 'syl_id'
,display_naam VARCHAR2(100)PATH 'display_naam'
,alt_db VARCHAR2(100)PATH 'alt_db') xt;
ファイルをロードして変換する方法を再考することができます。私はこれがyour other questionに関連していると仮定します。この場合、独自のXMLパーサーを構築しているようです。オラクルは、これを行うためのツールを提供しています。
最初にファイルをロードするには、use SQL*Loader to load the data as an XMLTypeのいずれかを使用するか、DBMS_XSLPROCESSOR.READ2CLOBなどを使用してファイルをCLOBとして読み取ってからXMLTypeに変換できます。
XMLTypeとしてロードした後、XPathを使用して値を反復処理して表に挿入するPL/SQLプロシージャを使用できます。
おそらく他にもいくつかの方法があります。
私はこれらのアイデアのどれも、あなたが望んでいたほど簡単ではないと確信しています。 XMLの処理は、区切り文字付きファイルのロードに通常使用されるSQL * Loaderよりもはるかに複雑です。