Unidad 7. Actualización de datos (IV)


7.7. Modificar datos almacenados - UPDATE

La sentencia UPDATE modifica los valores de una o más columnas en  las filas seleccionadas de una única tabla.
Para modificar los datos de una tabla es necesario disponer del privilegio UPDATE sobre dicha tabla.


   UPDATE 

        [ TOP ( expression ) [ PERCENT ] ] 

        <destino>

        SET { nbcolumna = { expresion | DEFAULT  | NULL }

            } [ ,...n ] 

        [ FROM{  <origen> }] 

        [ WHERE  <condicion> ]

     [;]

   <destino> ::=

     {   

       [nbBaseDatos.[nbEsquema.]| nbEsquema.]nbTablaVista

     }

Con <destino> indicamos la tabla que se va a actualizar.
La cláusula SET especifica qué columnas van a modificarse y con qué valor, el valor se puede expresar mediante una expresión, la palabra DEFAULT que equivale al valor predeterminado de la columna, o el valor nulo NULL.
Las columnas de identidad no se pueden actualizar.
Expresión en cada asignación  debe generar un valor del tipo de dato apropiado para la columna indicada. La expresión debe ser calculable basada en los valores de la fila actualmente en actualización. Si para el cálculo se utiliza una columna que también se modifica, el valor que se utilizará es el de antes de la modificación, lo mismo para la condición del WHERE.
Expresión también puede ser una subconsulta siempre y cuanto devuelva un único valor y cumpla las condiciones anteriormente expuestas.

Por ejemplo:


UPDATE oficinas SET ventas = 0;

Actualiza todas las filas de la tabla oficinas dejando el campo ventas con el valor cero.
Si el campo ventas está definido con un valor predeterminado 0, la sentencia anterior equivale a:


UPDATE oficinas SET ventas =  DEFAULT; 

Si lo que queremos es dejar el campo a nulo:


UPDATE oficinas SET ventas = NULL;

En una misma sentencia podemos actualizar varias columnas, sólo tenemos que indicar las distintas asignaciones separadas por comas:


UPDATE oficinas SET ventas = 0,  objetivo = 0;

Los nombres de columna pueden especificarse en cualquier orden.

Si no queremos actualizar todas las filas de la tabla sino unas cuantas, utilizaremos la cláusula TOP, o unas determinadas, utilizaremos la cláusula WHERE.


TOP ( expresion ) [ PERCENT ] 

Especifica el número o porcentaje de filas aleatorias que se van a modificar.
expression debe generar un valor numérico e indica el número de filas a modificar empezando por el principio. Como en la SELECT, si añadimos la palabra PERCENT, el número representado por expresión se refiere al porcentaje de filas a modificar sobre el total. La cláusula TOP funciona casi igual que en la SELECT pero en este caso, las filas no se ordenan, y la expresión debe ir entre paréntesis.

Por ejemplo:


UPDATE TOP (10) PERCENT oficinas

  SET ventas = 0;

Actualiza el 10% de filas de la tabla oficinas.


   [ WHERE  <condicion> ] 

Utilizamos la cláusula WHERE para filtrar las filas a actualizar. Se actualizarán todas las filas que cumplan la condición. Por ejemplo si queremos actualizar sólo las oficinas del Este:


UPDATE oficinas

   SET ventas = 0

   WHERE region = 'Este';

Cuando para la condición de la cláusula WHERE necesitamos un dato de otra tabla podemos utilizar una subconsulta:


UPDATE empleados SET ventas = 0

WHERE oficina IN (SELECT oficina

             FROM oficinas

             WHERE region = 'Este'); 

Cuando el campo de la otra tabla se utiliza para la cláusula SET, entonces debemos utilizar la cláusula FROM.
La cláusula FROM permite definir un origen de datos basado en varias tablas, y ese origen será el utilizado para realizar la actualización.

Por ejemplo queremos actualizar el importe de los pedidos con el precio de la tabla productos.


UPDATE pedidos SET importe = cant * precio

FROM pedidos INNER JOIN productos

ON fab = idfab AND producto = idproducto; 

Modificamos la tabla pedidos dejando en la columna importe el resultado de multiplicar la cantidad del pedido por el precio del producto que se encuentra en la tabla productos.

Si la actualización de una fila infringe una restricción o una regla, infringe la configuración de valores NULL de la columna o si el nuevo valor es de un tipo de datos incompatible con la columna, se cancela la instrucción, se devuelve un error y no se actualiza ningún registro.
Cuando una instrucción UPDATE encuentra un error aritmético (error de desbordamiento, división por cero o de dominio) durante la evaluación de la expresión, la actualización no se lleva a cabo. El resto del lote no se ejecuta y se devuelve un mensaje de error.

Además del permiso de UPDATE, se requieren permisos SELECT para la tabla que se actualiza si la instrucción UPDATE contiene una cláusula WHERE o en el caso de que el argumento expression de la cláusula SET utilice una columna de la tabla, y permisos SELECT para la tabla del origen si utilizamos una cláusula FROM o un WHERE con subconsulta.

Para practicar puedes realizar este Ejercicio Modificar datos con UPDATE.

Febrero-2010
Pág. 7.4

Atrás  Inicio  Adelante






.