Sentencia UPDATE

La sentencia UPDATE cambia los valores de columnas específicas, en filas seleccionadas, en una tabla en una base de datos externa.

SINTAXIS

Todas las filas para las que la expresión de la cláusula WHERE toma el valor TRUE se actualizan en la tabla identificada por ReferenciaTabla. Se examina cada fila a su vez y se establece una variable que apunta a la fila actual. Normalmente, la expresión de la cláusula WHERE utiliza esta variable para acceder a los valores de columna y hacer así que las filas se actualicen o se conserven sin cambios, según sus contenidos. Se hace referencia a la variable mediante NombreCorrelación o, si no hay ninguna cláusula AS, mediante NombreTabla. Cuando se ha seleccionado una fila para actualizar, a cada columna nombrada en la cláusula SET se le da un nuevo valor, determinado por la expresión correspondiente. Si lo desea, estas expresiones pueden hacer referencia a la variable de fila actual.

Referencia de tabla

Una referencia de tabla es un caso especial de referencias de campo que se utiliza para hacer referencia a los árboles de mensaje. Siempre empieza con la palabra "Database" y puede contener cualquiera de estos elementos:
  • Sólo un nombre de tabla
  • Un nombre de esquema y un nombre de tabla
  • Un nombre de origen de datos (es decir, el nombre de una instancia de base de datos), un nombre de esquema y un nombre de tabla
En cada caso, el nombre puede especificarse directamente o mediante una expresión encerrada entre llaves ({...}). Un nombre de origen de datos, esquema o tabla especificado directamente, puede ser sustituido. Es decir, si el nombre utilizado se ha declarado como un nombre conocido, se utiliza más bien el valor del nombre declarado en lugar del nombre mismo (consulte Sentencia DECLARE).

Si no se especifica un nombre de esquema, se utiliza el esquema por omisión para el usuario de base de datos del intermediario.

Si no se especifica un nombre de origen de datos, se utiliza la base de datos que indica el atributo data source del nodo.

La cláusula WHERE

La expresión de la cláusula WHERE puede utilizar cualquier operador y función del intermediario en cualquier combinación. Puede hacer referencia a columnas de tabla, campos de mensajes y cualquier constante o variable declarada.

Sin embargo, tenga en cuenta que el intermediario trata la expresión de la cláusula WHERE examinando la expresión y decidiendo si la base de datos puede evaluar toda la expresión. Si puede, se suministra a la base de datos. Para que pueda evaluarla la base de datos, debe utilizar únicamente las funciones y operadores a los que dé soporte la base de datos.

No obstante, la cláusula WHERE hace referencia a campos de mensajes, nombres de correlación declarados en las cláusulas SELECT que las contienen, y a cualquier otra variable o constante declarada dentro del ámbito.

Si la base de datos no puede evaluar toda la expresión, el intermediario busca los operadores AND de nivel superior y examina cada subexpresión por separado. A continuación, intenta proporciona a la base de datos las subexpresiones que puede evaluar, dejando que el intermediario evalúe el resto. Debe tener en cuenta esta situación por dos motivos:
  1. Los cambios en las expresiones de la cláusula WHERE que aparentemente pueden parecer triviales pueden tener un gran impacto en el rendimiento. Puede determinar la cantidad de la expresión que se ha suministrado a la base de datos examinando un rastreo de usuario.
  2. Algunas funciones de base de datos se comportan de manera ligeramente diferente del intermediario.

Manejo de errores

Es posible que se produzcan errores durante las operaciones de actualización. Por ejemplo, es posible que la base de datos no esté operativa, o la tabla puede tener limitaciones definidas que los nuevos valores violarían. En estos casos, se genera una excepción (a menos que el nodo tenga su propiedad Generar excepción en error de base de datos establecida en FALSE). Estas excepciones establecen los valores SQL adecuados de código, estado, error nativo y texto de error, y pueden ser manejadas por los manejadores de errores (consulte la sentencia DECLARE HANDLER).

Para obtener más información sobre el manejo de errores de base de datos, consulte Captura del estado de la base de datos.

Ejemplos

El ejemplo siguiente supone que se ha configurado la propiedad dataSource del nodo Database y que la base de datos que identifica tiene una tabla denominada STOCKPRICES, con columnas denominadas COMPANY y PRICES. Actualiza la columna PRICE de las filas de la tabla STOCKPRICES cuya columna COMPANY coincide con el valor proporcionado en el campo Company del mensaje.
UPDATE Database.StockPrices AS SP
 SET PRICE = InputBody.Message.StockPrice
 WHERE SP.COMPANY = InputBody.Message.Company
En el siguiente ejemplo (que efectúa suposiciones similares), la expresión de la cláusula SET hace referencia al valor existente de una columna y reduce el valor en una cantidad en el mensaje:
UPDATE Database.INVENTORY AS INV
 SET QUANTITY = INV.QUANTITY - InputBody.Message.QuantitySold
 WHERE INV.ITEMNUMBER = InputBody.Message.ItemNumber
El ejemplo siguiente actualiza varias columnas:
UPDATE Database.table AS T
 SET column1 = T.column1+1,
     column2 = T.column2+2;

Observe que los nombres de columna (a la izquierda del signo "=") son identificadores solos. No deben calificarse con un nombre de tabla o un nombre de correlación. Por el contrario, las referencias a las columnas de base de datos en las expresiones (a la derecha del signo "=") deben calificarse con el nombre de correlación.

El ejemplo siguiente muestra el uso de nombres calculados de origen de datos, esquema y tabla:
-- Declarar variables para que contengan los nombres de origen de datos, esquema
-- y tabla, y establecer sus valores por omisión
DECLARE Source CHARACTER 'Production';
DECLARE Schema CHARACTER 'db2admin';
DECLARE Table  CHARACTER 'DynamicTable1';
-- Aquí va el código que calcula sus valores actuales

-- Actualizar las filas en la tabla
UPDATE Database.{Source}.{Schema}.{Table} AS R SET Value = 0;
Conceptos relacionados
Visión general de ESQL
Tareas relacionadas
Desarrollo de ESQL
Captura del estado de la base de datos
Referencia relacionada
Diagramas de sintaxis: tipos disponibles
Sentencias ESQL
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ak05160_