2011-09-15 10 views
0

私はemployee(id number, deatils XML)という名前のテーブルを持っていて、deatilsカラムはnullableです。IBM DB2 XML列を更新してヌルに戻す

私たちは、私は次のようなデータ

insert into employee(1, '<xml><employee><name>Foo</name></employee></xml>'); 
insert into employee(2, null); 
insert into employee(3, '<xml><employee><name>Bar</name></employee></xml>'); 

私が原因で2列目のヌルの他のスキーマにこのデータをコピー/復元しません既知のバグがありIBM Optimはツールを持っているが挿入されているとしましょう。データの抽出はうまく抽出されますが、他のスキーマへの挿入は失敗します。

null値をダミーxmlで更新し、データを挿入し、そのダミーxmlをtragetデータベースでnullに置き換えてください。私はそうするためにはdb2のクエリが必要です。

私は、この更新後

update employee set details='<xml></xml>' where details=null; 

をやっている私は、データを抽出し、ターゲットに挿入するが、私はエラーを取得していますダミーXMLを更新しようとすることができます。

は基本的にDB2はCLOBとして格納されたXMLによる私のwhere句を持つすべてのレコードを見つけることができない

update employee set deatils=null where details='<xml></xml>'; 

私たちは、私は(仕事を文句を言わないもの)以下のようにしようとしているとしましょう。

助けてください!

答えて

0

tutorialまたはこれらのtwobooksを調べてください。あなたは

update employee set details=xmlparse(document('<xml></xml')) where details=null; 

に必要な、その後

xquery db2-fn:xmlcolumn('employee')/xml; 

ようなもので、XQuery言語を使用して、クエリそのXML列がCLOBのではありません注意してください。それらは、新しい機能やコマンドを使用して処理する必要がある特殊な列です。また、適切なXMLインデックスを定義して文書の構造を深く理解し、XMLをWHERE句の通常のvarchar文字列に変換することは決してありません。

+0

にどこの詳細= NULL;'私はUDPATE使用することができます '従業員は' =詳細を設定 foo '詳細はnullですが、どうすればいいですか? – Satesh

0

nullがXMLに存在しません。代わりに、あなたは "空のシーケンス"を持っています。 fn:booleanを使用して、空のシーケンスをテストできます。したがって、従業員を探して見つからない場合、それらのレコードをnullに置き換えることができます。

このような何か:代わりに `更新従業員が詳細を設定= XMLPARSE(文書(」

UPDATE yourtable, XMLTABLE('$d/xml' passing details as "d" 
    COLUMNS 
     empIsNull PATH 'if (fn:boolean(/xml/employee) then 0 else 1') as XMLINFO 
SET yourtable.details = null 
WHERE XMLINFO.empIsNull = 1 
関連する問題