Eliminación de datos mediante sentencias DELETE
Puede utilizar la sentencia DELETE para eliminar filas enteras de una tabla.
La sentencia DELETE elimina cero o más filas de una tabla, dependiendo de cuántas filas cumplen la condición de búsqueda que se especifica en la cláusula WHERE. Si omite una cláusula WHERE de una sentencia DELETE, Db2 elimina todas las filas de la tabla o vista que nombre. Por lo tanto, utilice la sentencia DELETE con cuidado. La sentencia DELETE no elimina columnas específicas de la fila.
Ejemplo de instrucciones DELETE
La siguiente sentencia elimina cada fila de la tabla NEWEMP que tenga el número de empleado 000060.
DELETE FROM NEWEMP
WHERE EMPNO = '000060';
Supongamos que las sentencias de los siguientes ejemplos están incrustadas en programas PL/I.
- En la tabla DSN8C10.EMP, elimine la fila en la que se encuentra actualmente el cursor C1.
EXEC SQL DELETE FROM DSN8C10.EMP WHERE CURRENT OF C1; - De la tabla DSN8C10.EMP, elimine todas las filas de los departamentos E11 y D21.
EXEC SQL DELETE FROM DSN8C10.EMP WHERE WORKDEPT = 'E11' OR WORKDEPT = 'D21'; - De la tabla de empleados X, elimine al empleado que tenga más ausencias.
EXEC SQL DELETE FROM EMP X WHERE ABSENT = (SELECT MAX(ABSENT) FROM EMP Y WHERE X.WORKDEPT = Y.WORKDEPT); - Suponiendo que el cursor CS1 está situado en un conjunto de filas que consta de 10 filas de tabla T1, elimine las 10 filas del conjunto de filas.
EXEC SQL DELETE FROM T1 WHERE CURRENT OF CS1; - Suponiendo que el cursor de CS1 se encuentra en un conjunto de filas que consta de 10 filas de tabla T1, elimine la cuarta fila del conjunto de filas.
EXEC SQL DELETE FROM T1 WHERE CURRENT OF CS1 FOR ROW 4 OF ROWSET; - Eliminar filas en la tabla T1 si el valor de la columna COL2 coincide con la cardinalidad de la matriz INTA. La matriz INTA se especifica como argumento para la función CARDINALITY en la sentencia DELETE.
CREATE TYPE INTARRAY AS INTEGER ARRAY[6]; CREATE VARIABLE INTA AS INTARRAY; SET INTA = ARRAY[1, 2, 3, 4, 5]; CREATE TABLE T1 (COL1 CHAR(7), COL2 INT); INSERT INTO T1 VALUES('abc', 10); DELETE FROM T1 WHERE COL2 = CARDINALITY(INTA); - Eliminar solo 3 filas de la tabla T1 donde el valor de la columna C2 es mayor que 10.
DELETE FROM T1 WHERE C2 > 10 FETCH FIRST 3 ROWS ONLY;