Ce face UpdateXML()
UpdateXML() caută elementul indicat de expresia XPath și îl înlocuiește în întregime (cu tot cu etichete) cu fragmentul xml_nou. Documentul original nu se modifică; funcția returnează o copie modificată, pe care o poți salva cu UPDATE.
Expresia trebuie să găsească exact un element. Dacă nu găsește niciunul sau găsește mai multe, funcția returnează XML-ul original, neschimbat. Pentru XML invalid returnează NULL.
Parametri
| Parametru | Descriere |
|---|---|
xml |
Documentul XML. |
xpath |
Expresia XPath pentru elementul înlocuit. |
xml_nou |
Fragmentul pus în locul lui. |
Ce returnează
Documentul XML modificat, cel original sau NULL.
Exemple
Exemplul 1: Înlocuirea unui element
SET @xml = '<catalog><produs id="1"><nume>Laptop</nume><pret>3500</pret></produs><produs id="2"><nume>Mouse</nume><pret>80</pret></produs></catalog>';
SELECT UpdateXML(@xml, '/catalog/produs[2]/pret', '<pret>95</pret>') AS modificat;
Rezultat
+------------------------------------------------------------------------------------------------------------------------------------------+
| modificat |
+------------------------------------------------------------------------------------------------------------------------------------------+
| <catalog><produs id="1"><nume>Laptop</nume><pret>3500</pret></produs><produs id="2"><nume>Mouse</nume><pret>95</pret></produs></catalog> |
+------------------------------------------------------------------------------------------------------------------------------------------+
Exemplul 2: Niciun element sau mai multe: XML-ul rămâne la fel
SELECT UpdateXML('<a><b>1</b><b>2</b></a>', '/a/b', '<c/>') AS doua_potriviri,
UpdateXML('<a><b>1</b></a>', '/a/z', '<c/>') AS nicio_potrivire;
Rezultat
+-------------------------+-----------------+
| doua_potriviri | nicio_potrivire |
+-------------------------+-----------------+
| <a><b>1</b><b>2</b></a> | <a><b>1</b></a> |
+-------------------------+-----------------+
Exemplul 3: Modificarea unei coloane
CREATE TABLE comenzi (id INT, detalii TEXT);
INSERT INTO comenzi VALUES (1, '<comanda><client>Ana</client><stare>nouă</stare></comanda>');
UPDATE comenzi
SET detalii = UpdateXML(detalii, '/comanda/stare', '<stare>livrată</stare>')
WHERE id = 1;
SELECT detalii FROM comenzi;
Rezultat
+----------------------------------------------------------------+
| detalii |
+----------------------------------------------------------------+
| <comanda><client>Ana</client><stare>livrată</stare></comanda> |
+----------------------------------------------------------------+
Greșeli frecvente
- Crezi că modificarea a reușit pentru că nu ai primit eroare. Dacă XPath găsește zero sau mai multe elemente, XML-ul rămâne neschimbat; verifică întâi cu
ExtractValue(xml, 'count(...)'). - Dai ca al treilea argument doar textul (
'95'). Elementul întreg este înlocuit, deci pierzi eticheta; scrie'<pret>95</pret>'.
Comenzi înrudite
ExtractValue(): Extrage textul dintr-un document XML, folosind o expresie XPath (de exemplu /catalog/produs/nume).REPLACE(): Înlocuiește toate aparițiile unui text cu alt text.JSON_SET(): Setează valori în JSON: le înlocuiește dacă există și le adaugă dacă lipsesc.