2010-04-12 6 views
0

J'écris une application qui supporte les champs personnalisés. Actuellement, je stocke tous les champs personnalisés dans un champ de texte XML formated (par exemple '<root><field1>val1</field1><field2>val2</field2></root>' dans cust_field)MySQL UpdateXML avec insertion automatique de noeud?

Je suis en mesure de utiliser UpdateXML (de cust_field, «/root/field1 », '<field1>new value</field1') de mettre à jour ces valeurs, si je l'utilise updateXML (cust_field, '/ root/field3', '<field3>new value</field3>') alors cela ne fonctionne pas puisque field3 n'est pas dans l'ancienne valeur. Est-il possible de laisser MySQL insérer automatiquement le nouveau noeud field3 et sa valeur dans cust_field? Je pense à la procédure stockée ou même la fonction stockée, mais pas familier avec les deux, quelqu'un peut-il me diriger vers la bonne direction?

Répondre

0

Les fonctions XML de MySQL ne le feront pas automatiquement.

Vous pouvez créer une fonction stockée pour appeler UpdateXML() si l'élément est présent, sinon ajouter l'élément en utilisant votre propre logique.

est ici un modèle de base pour vous aider à démarrer:

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 $$ 
0

En fait, je fini par mettre la logique dans mon moteur sql app.

Questions connexes