Sentencia DELETE FROM

La sentencia DELETE FROM elimina las filas de una tabla de una base de datos externa, basándose en una condición de búsqueda.

SINTAXIS

Todas las filas para las que la expresión de la cláusula WHERE toma el valor TRUE se suprimen de 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 se retengan o supriman filas, según sus contenidos. Se hace referencia a la variable mediante NombreCorrelación o, si no hay ninguna cláusula AS, mediante NombreTabla.

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 supresión. Por ejemplo, es posible que la base de datos no esté operativa. 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 y que la base de datos que identifica tiene una tabla denominada SHAREHOLDINGS, con una columna denominada ACCOUNTNO.
DELETE FROM Database.SHAREHOLDINGS AS S
       WHERE S.ACCOUNTNO = InputBody.AccountNumber;

Esto suprime todas las filas de la tabla SHAREHOLDINGS en las que el valor en la columna ACCOUNTNO (en la tabla) es igual al que figura en el campo AccountNumber del mensaje. Quizá no se suprima ninguna fila de la tabla, o quizá se suprima una o más filas.

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

-- Suprimir filas de la tabla
DELETE FROM Database.{Source}.{Schema}.{Table} As R WHERE R.Name = 'Joe';
Conceptos relacionados
Visión general de ESQL
Tareas relacionadas
Desarrollo de ESQL
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
ak04990_