MySQL UpdateXML с автоматической вставкой узла? - PullRequest
0 голосов
/ 12 апреля 2010

Я пишу приложение, которое поддерживает настраиваемые поля. В настоящее время я храню все настраиваемые поля в текстовом поле с форматированием XML (например, '<root><field1>val1</field1><field2>val2</field2></root>' в поле cust_field)

Я могу использовать updateXML (cust_field, '/ root / field1', '<field1>new value</field1') для обновления этих значений, однако, если я использую updateXML (cust_field, '/ root / field3', '<field3>new value</field3>'), тогда он не работает, так как field3 не имеет старого значения. Есть ли способ позволить MySQL автоматически вставлять новый узел field3 и его значение в cust_field? Я думаю о хранимой процедуре или даже о сохраненной функции, но не знаком с обеими. Может ли кто-нибудь указать мне правильное направление?

Ответы [ 2 ]

0 голосов
/ 21 апреля 2010

Я на самом деле положил логику в свой движок SQL приложения.

0 голосов
/ 13 апреля 2010

Функции MySQL XML не будут делать это автоматически.

Вы можете создать сохраненную функцию для вызова UpdateXML (), если элемент присутствует, в противном случае, чтобы добавить элемент, используя собственную логику.

Вот базовый шаблон для начала работы:

DELIMITER $$

CREATE FUNCTION update_xml(xml_target text, xpath_expr text, new_xml text) returns text
BEGIN
  DECLARE return_val text;

  IF (ExtractValue(xml_target,xpath_expr) != '')
  THEN
    RETURN updateXML(xml_target,xpath_expr,new_xml); 
  ELSE
    SET return_val := xml_target;
    -- add code here to insert the new element into your XML string
    RETURN return_val;
  END IF;

END $$
...