Modifica el contenido de una tabla virtual. Si se utiliza el atributo where, la actualización se aplica a todos los registros que cumplen la condición indicada al atributo. En caso contrario, la modificación se aplica a un sólo registro.

1 vtable.update

<vtable.update
    name='name'
    row='row'
    where='where'
>
    <column name='name'> *
        <value /> !
    </column>
</vtable.update>

Exceptions

attribute name required

No se ha especificado el nombre del campo de la tabla.

vtable name required

No se ha especificado el nombre de la vtable.

missing columns for vtable update

No se ha indicado ninguna columna para actualizar su valor.

Remarks

El atributo row es opcional, debido a que en ciertas situaciones puede no ser necesario,por ejemplo, en el contexto de un cursor. En el cuerpo de un <foreach> , en tanto que las acciones afectan al registro actual (que se está procesando), no tendría sentido hacer uso del atributo row.

Example
Copy
<xsql-script name='vtable_update_sample1'>
    <body>
        <vtable name='personas'>
            <column name='dni'       type='string' unique='true' />
            <column name='nombre'    type='string'               />
            <column name='apellido1' type='string'               />
            <column name='apellido2' type='string'               />
        </vtable>

        <vtable.insert name='personas'>
            <string>46352700Z</string>
            <string>John</string>
            <string>Smith</string>
            <string>Simpson</string>
        </vtable.insert>

        <println>
            <vtable.update name='personas' row='0'>
                <column name='nombre'>George</column>
            </vtable.update>
        </println>
    </body>
</xsql-script>

Se genera una tabla virtual de nombre personas, compuesta de cuatro columnas de tipo string: dni, nombre, apellido1 y apellido2.Posteriormente, se le inserta un registro. Con el elemento <vtable.update> se actualiza el contenido de la columna nombre ( <column name='nombre'>) del primer y único registro( row='0').

Example

Actualización utilizando el atributo where

Copy
<xsql-script name='vtable_where'>
   <body>
       <vtable name='personas'>
           <column name='dni'       type='string' unique='true' />
           <column name='nombre'    type='string'               />
           <column name='apellido1' type='string'               />
           <column name='apellido2' type='string'               />
       </vtable>

       <vtable.insert name='personas'>
           <string>46352700Z</string>
           <string>John</string>
           <string>Smith</string>
           <string>Simpson</string>
       </vtable.insert>

       <vtable.insert name='personas'>
           <string>49352110X</string>
           <string>David</string>
           <string>Robert</string>
           <string>Jones</string>
       </vtable.insert>

       <vtable.insert name='personas'>
           <string>46282627B</string>
           <string>John</string>
           <string>Frederick</string>
           <string>Herschel</string>
       </vtable.insert>
       
       <println>Partimos de los siguientes datos</println>
       
       <println>
           <personas />
       </println>

        <println>Cambiamos el segundo apellido de las entrados con nombres empezados con 'J'</println>
       <vtable.update name='personas' where="fn:startsWith(nombre, 'J')">
           <column name='apellido2'>xxxxxxx</column>
       </vtable.update>
       
       <println>
           <personas />
       </println>
       
       <println>Borramos las entrados con nombres empezados con 'D'</println>
       <vtable.delete name='personas' where="fn:startsWith(nombre, 'D')" />
       
       <println>
           <personas />
       </println>
   </body>
</xsql-script>

Se genera una tabla virtual de nombre personas, compuesta de cuatro columnas de tipo string: dni, nombre, apellido1 y apellido2. Tras añadir a tabla virtual 3 registros, se cambia el valor del nombre de todas las personas llamadas "John" y se pasan a llamar "James".

startsWith

Se puede usar la función fn:startsWith para filtrar registros de una vtable cuyos valores de la columna indicada, comienzan con un patrón determinado:

Copy
<vtable.update name='personas' where="fn:startsWith(nombre, 'J')">
   <column name='nombre'>James</column>
</vtable.update>
Example

Actualización utilizando el atributo where para encontrar los registros con un campo nulo.

Copy
<xsql-script name='vtable_update_where_null'>
    <body>
        <vtable name='personas'>
            <column name='dni'       type='string' unique='true' />
            <column name='nombre'    type='string'               />
            <column name='apellido1' type='string'               />
            <column name='apellido2' type='string'               />
            <column name='apellido3' type='string'               />
        </vtable>

        <vtable.insert name='personas'>
            <string>46352700Z</string>
            <string>John</string>
            <string>Smith</string>
            <string>Simpson</string>
            <null />
        </vtable.insert>
        
        <println>
            <vtable.update name='personas' where="isNullOrEmpty(apellido3)">
                <column name='nombre'>George</column>
            </vtable.update>
        </println>
    </body>
</xsql-script>