IBM DB2 XML Column Обновление и возврат к нулю - PullRequest
0 голосов
/ 16 сентября 2011

У меня есть таблица с именем employee(id number, deatils XML) и столбец deatils обнуляем.

Допустим, я вставил следующие данные

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>');

У меня есть IBM Optim инструмент, который имеет ошибку, которая не будет копировать / восстанавливать эти данные в другую схему из-за нуля во второй строке.Хотя извлечение данных будет извлечено нормально, но вставить в другую схему не удастся.

Обойти это можно - обновить пустое значение каким-нибудь фиктивным xml, вставить данные и заменить этот фиктивный xml нулевым в базе данных traget.Мне нужны db2-запросы для этого.

Я делаю

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

После этого обновления я могу извлечь данные и вставить в цель, но когда я пытаюсь обновить фиктивный XML, я получаю ошибки.

Допустим, я пробовал, как показано ниже (что не работает)

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

В основном db2 не может найти никаких записей с предложением where из-за того, что xml хранится как clob.

Пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 25 августа 2015

ноль не существует в XML.Вместо этого у вас есть «пустая последовательность».Вы можете проверить пустую последовательность, используя fn: boolean.Поэтому, если вы ищете сотрудника и не нашли его, вы можете заменить эти записи на ноль.

Примерно так:

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
0 голосов
/ 17 сентября 2011

Пожалуйста, изучите этот учебник или эти две книги .Вам нужно

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

, а затем выполнить запрос с использованием языка XQUERY с чем-то вроде

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

Обратите внимание, что столбцы XML не являются сгустками.Это специализированные столбцы, которые вы должны обрабатывать, используя для этого новые функции и команды.Кроме того, определите правильные XML-индексы, которые могут глубоко войти в структуру ваших документов, и никогда не преобразовывать XML в обычную строку varchar для предложения WHERE (это приведет к мгновенному снижению производительности).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...