Di seguito ci sono alcune query utili per la modifica di xml type su Oracle 10g.
Trova tutti i record che hanno il nodo:
SELECT * FROM mia_tab t WHERE existsNode(t.xml,'/miaRoot/mioNodo') = 1;
Trova tutti i record che hanno il nodo vuoto;
SELECT * FROM mia_tab t WHERE existsNode(t.xml,'/miaRoot/mioNodo') = 1 AND existsNode(t.xml,'/miaRoot[string(mioNodo) = ""]') = 1;
Trova tutti i record che non hanno il nodo:
SELECT * FROM mia_tab t WHERE existsNode(t.xml,'/miaRoot/mioNodo') = 0;
Modifica il valore del nodo in tutti i record che hanno il nodo non vuoto:
UPDATE mia_tab t SET t.xml = updateXML(t.xml, '/miaRoot/mioNodo/text()', t.campo) WHERE existsNode(t.xml,'/miaRoot/mioNodo') = 1 AND existsNode(t.xml,'/miaRoot[string(mioNodo) = ""]') = 1;
Elimina il nodo da tutti i record che hanno il nodo vuoto:
UPDATE mia_tab t SET t.xml = deleteXML(t.xml, '/miaRoot/mioNodo') WHERE existsNode(t.xml,'/miaRoot/mioNodo') = 1 AND existsNode(t.xml,'/miaRoot[string(mioNodo) = ""]') = 1;
Aggiunge il nodo valorizzato a tutti i record che non hanno il nodo:
UPDATE mia_tab t SET t.xml = insertChildXML(t.xml, '/miaRoot', 'mioNodo', XMLType('<mioNodo>'||t.campo||'</mioNodo>')) WHERE existsNode(t.xml,'/miaRoot/mioNodo') = 0;