Expresión de inserción
Una expresión de inserción inserta copias de uno o más nodos en una posición designada en una secuencia de nodos.
Sintaxis
- insertar nodos o insertar nodo
- Las palabras clave que comienzan una expresión de inserción. insert nodes o insert node es válido, independientemente del número de nodos que se vayan a insertar.
- fuente-expresión
- Una expresión de actualización ( XQuery ) que no es una expresión de actualización. El resultado de la expresión fuente es una secuencia de cero o más nodos que se van a insertar. Esos nodos se denominan secuencia de inserción. Si la secuencia de inserción contiene un nodo de documento, el nodo de documento se sustituye en la secuencia de inserción por sus hijos. Si la secuencia de inserción contiene una secuencia adyacente de uno o más valores atómicos, los valores atómicos se reemplazan en la secuencia de inserción con un nuevo nodo de texto que contiene el resultado de convertir cada valor atómico en una cadena e insertar un único carácter de espacio entre valores atómicos adyacentes.
Si la secuencia de inserción contiene nodos de atributos que aparecen primero en la secuencia, los atributos se añaden al nodo de expresión de destino o a su padre, dependiendo de la palabra clave que se especifique. Si la secuencia de inserción contiene un nodo de atributo que sigue a un nodo que no es un nodo de atributo, Db2 devuelve un error.
- antes
- Palabra clave que especifica que los nodos de expresión de origen se convierten en los hermanos precedentes del nodo de expresión de destino.
Si se insertan varios nodos antes de la expresión de destino, los nodos permanecen adyacentes y se conserva su orden. Si la secuencia de inserción contiene nodos de atributo, los nodos de atributo se convierten en atributos del padre del nodo de destino.
- después
- Palabra clave que especifica que los nodos de expresión de origen se convierten en los siguientes hermanos del nodo de expresión de destino.
Si se insertan varios nodos después de la expresión de destino, los nodos permanecen adyacentes y se conserva su orden. Si la secuencia de inserción contiene nodos de atributo, los nodos de atributo se convierten en atributos del padre del nodo de destino.
- como el primero en
- Palabras clave que especifican que los nodos de expresión de origen se convierten en los primeros hijos del nodo de expresión de destino.
Los nodos de expresión de origen se insertan como los primeros hijos del nodo de expresión de destino. Si se insertan varios nodos como primeros hijos del nodo de expresión de destino, los nodos permanecen adyacentes y se conserva su orden. Si la secuencia de inserción contiene nodos de atributo, los nodos de atributo se convierten en atributos del nodo de destino.
- como último en
- Palabras clave que especifican que los nodos de expresión de origen se convierten en los últimos hijos del nodo de expresión de destino.
Los nodos de expresión de origen se insertan como los últimos hijos del nodo de expresión de destino. Si se insertan varios nodos como últimos hijos del nodo de expresión de destino, los nodos permanecen adyacentes y se conserva su orden. Si la secuencia de inserción contiene nodos de atributo, los nodos de atributo se convierten en atributos del nodo de destino.
- en
- Tiene el mismo comportamiento que as last into.
- expresión objetivo
- Una expresión de actualización ( XQuery ) que no es una expresión de actualización. Si el resultado de target-expression es una secuencia vacía, se devuelve un error. Las siguientes reglas se aplican a la expresión de destino :
- Si se especifica la palabra clave before o after :
- El resultado de la expresión de destino debe ser un único elemento, texto, instrucción de procesamiento o nodo de comentario cuya propiedad principal no esté vacía.
- Si la secuencia de inserción contiene un nodo de atributo, el padre del nodo de expresión de destino debe ser un nodo de elemento.
- La propiedad principal del nodo de expresión de destino no puede estar vacía.
- Si un nodo de atributo en la secuencia de inserción tiene un nombre calificado (QName) con un enlace de espacio de nombres implícito, la propiedad
namespacesdel nodo padre del nodo de expresión de destino se modifica para incluir un enlace de espacio de nombres para cualquier prefijo de espacio de nombres de atributo que aún no tenga enlaces. Si el enlace de espacio de nombres implícito entra en conflicto con un enlace de espacio de nombres en la propiedad "namespaces" del nodo padre del nodo de expresión de destino, se devuelve un error.
- Si se especifican las palabras clave into, as first into o as last into :
- El resultado de la expresión de destino debe ser un único elemento, texto, instrucción de procesamiento o nodo de comentario cuya propiedad principal no esté vacía.
- Si la secuencia de inserción contiene un nodo de atributo, el nodo de expresión de destino no puede ser un nodo de documento.
- La propiedad principal del nodo de expresión de destino no puede estar vacía.
- Si un nodo de atributo en la secuencia de inserción tiene un nombre calificado (QName) con un enlace de espacio de nombres implícito, la propiedad
namespacesdel nodo de expresión de destino se modifica para incluir un enlace de espacio de nombres para cualquier prefijo de espacio de nombres de atributo que aún no tenga enlaces. Si el enlace de espacio de nombres implícito entra en conflicto con un enlace de espacio de nombres en la propiedad "namespaces" del nodo de expresión de destino, se devuelve un error.
- Si se especifica la palabra clave before o after :
Si la inserción de nodos da como resultado nodos de texto adyacentes con el mismo padre, los nodos de texto adyacentes se fusionan en un único nodo de texto. El valor de cadena del nodo de texto resultante es la concatenación de los valores de cadena de los nodos de texto adyacentes, sin espacios añadidos entre los valores de cadena.
Si el resultado de la inserción infringe alguna restricción del modelo de datos XPath 2.0 y XQuery 1.0, se devuelve un error.
Ejemplo
Supongamos que un documento de purchaseOrder encia tiene este aspecto:
<ipo:purchaseOrder
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ipo="http://www.example.com/IPO"
orderDate="2008-12-01">
<shipTo exportCode="1" xsi:type="ipo:UKAddress">
<name>Helen Zoe</name>
<street>55 Eden Street</street>
<city>San Jose</city>
<state>CA</state>
<postcode>CB1 1JR</postcode>
</shipTo>
<shipTo exportCode="1" xsi:type="ipo:UKAddress">
<name>Joe Lee</name>
<street>66 University Avenue</street>
<city>Palo Alto</city>
<state>CA</state>
<postcode>CB1 1JR</postcode>
</shipTo>
<billTo xsi:type="ipo:USAddress">
<name>Robert Smith</name>
<street>8 Oak Avenue</street>
<city>Old Town</city>
<state>PA</state>
<zip>95819</zip>
</billTo>
<items>
<item partNum="833-AA">
<productName>Lapis necklace</productName>
<quantity>1</quantity>
<USPrice>99.95</USPrice>
<ipo:comment>Want this for the holidays!</ipo:comment>
<shipDate>2008-12-05</shipDate>
</item>
<item partNum="945-ZG">
<productName>Sapphire Bracelet</productName>
<quantity>2</quantity>
<USPrice>178.99</USPrice>
<shipDate>2009-01-03</shipDate>
</item>
</items>
</ipo:purchaseOrder>
La siguiente instrucción SQL UPDATE utiliza una expresión de actualización básica para insertar un nuevo nodo item como primer nodo bajo el nodo items en el documento purchaseOrder.
UPDATE T1
SET X1 = XMLMODIFY(
'declare namespace ipo="http://www.example.com/IPO";
insert nodes $item as first
into /ipo:purchaseOrder/items',
XMLPARSE(DOCUMENT
'<item partNum="747-BB">
<productName>Ruby Ring</productName>
<quantity>1</quantity>
<USPrice>75.50</USPrice>
<shipDate>2007-05-13</shipDate>
</item>') as "item") El resultado de la sentencia es el siguiente:
<ipo:purchaseOrder
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ipo="http://www.example.com/IPO"
orderDate="2008-12-01">
<shipTo exportCode="1" xsi:type="ipo:UKAddress">
<name>Helen Zoe</name>
<street>55 Eden Street</street>
<city>San Jose</city>
<state>CA</state>
<postcode>CB1 1JR</postcode>
</shipTo>
<shipTo exportCode="1" xsi:type="ipo:UKAddress">
<name>Joe Lee</name>
<street>66 University Avenue</street>
<city>Palo Alto</city>
<state>CA</state>
<postcode>CB1 1JR</postcode>
</shipTo>
<billTo xsi:type="ipo:USAddress">
<name>Robert Smith</name>
<street>8 Oak Avenue</street>
<city>Old Town</city>
<state>PA</state>
<zip>95819</zip>
</billTo>
<items>
<item partNum="747-BB">
<productName>Ruby Ring</productName>
<quantify>1</quantity>
<USPrice>75.50</USPrice>
<shipDate>2007-05-13</shipDate>
</item>
<item partNum="833-AA">
<productName>Lapis necklace</productName>
<quantity>1</quantity>
<USPrice>99.95</USPrice>
<ipo:comment>Want this for the holidays!</ipo:comment>
<shipDate>2008-12-05</shipDate>
</item>
<item partNum="945-ZG">
<productName>Sapphire Bracelet</productName>
<quantity>2</quantity>
<USPrice>178.99</USPrice>
<shipDate>2009-01-03</shipDate>
</item>
</items>
</ipo:purchaseOrder>
