Como seguramente sabrás, lo recomendable es que todas las operaciones que realices en una tabla (INSERT, UPDATE, DELETE, SELECT) las hagas a través de stored procedures o de vistas.

¿Por qué?

Porque de esa manera el procesamiento es más rápido (el Servidor siempre es más rápido que el Cliente) y te aseguras que la operación que deseas realizar esté sintácticamente correcta (si no lo está, no podrás compilar el stored procedure o la vista).

Pero supongamos que en tu Base de Datos tienes 100 tablas. ¿Necesitas escribir un stored procedure para cada tabla para borrar las filas de esa tabla?

No, no lo necesitas, y lo mejor es que no lo hagas. Para casos así lo mejor es parametrizar es decir enviar como parámetros de entrada los datos cambiantes. Entonces, escribiendo un solo stored procedure podrás borrar las filas de cualquiera de esas tablas.

CREATE PROCEDURE SP_BORRAR_FILAS(
   tcNombreTabla VARCHAR(32),
   tcCondicion   VARCHAR(1024))
AS
   DECLARE VARIABLE lcComando VARCHAR(1024);
BEGIN

   lcComando = 'DELETE FROM ' ||
                   tcNombreTabla ||
               IIF(CHAR_LENGTH(TRIM(tcCondicion)) > 0, ' WHERE ' || '' || tcCondicion || '', '');

   EXECUTE STATEMENT :lcComando;

END;

Este stored procedure recibe dos parámetros de entrada: el nombre de la tabla y la condición para borrar filas. Y nos servirá para borrar las filas de cualquier tabla y con cualquier condición de borrado.

Ejemplo 1. Para borrar el producto cuyo identificador es 597

EXECUTE PROCEDURE SP_BORRAR_FILAS('PRODUCTOS', 'PRD_IDENTI=597');

El producto cuyo identificador es 597 será borrado (siempre y cuando no hubiera alguna restricción Foreign Key que lo impida, claro)

Ejemplo 2. Para borrar el Banco cuyo nombre es CITIBANK

EXECUTE PROCEDURE SP_BORRAR_FILAS('BANCOS', 'BAN_NOMBRE = ''CITIBANK''');

En este caso fíjate en los apóstrofos (comillas simples) que rodean a la palabra CITIBANK. Como dentro de nuestra condición queremos emplear apóstrofos (comillas simples) entonces debemos escribirlos duplicados.

Ejemplo 3. Para borrar todas las cobranzas realizadas en el mes de enero de 2014

EXECUTE PROCEDURE SP_BORRAR_FILAS('COBRANZAS', 'EXTRACT(MONTH FROM COB_FECHAX) = 1 AND EXTRACT(YEAR FROM COB_FECHAX) = 2014');

En este caso la condición es más complicada porque involucra al operador AND. Pero el stored procedure sigue funcionando perfectamente, si la condición está bien escrita entonces se borrarán las filas que se desean borrar.

Ejemplo 4. Para borrar todas las filas de una tabla

EXECUTE PROCEDURE SP_BORRAR_FILAS('TEMP', '');

Aquí, se borraron todas las filas de una tabla llamada TEMP. Como no se estableció una condición para borrar filas eso significa que se quiere borrarlas a todas.

¡¡¡MUCHO CUIDADO CON ESTO!!!

Recuerda que no poner una condición de borrado significa borrar todas las filas de la tabla.

Conclusión:

Si parametrizamos nuestros stored procedures entonces tendremos varias ventajas:

  1. Estaremos 100% seguros de que siempre funcionará bien
  2. No tendremos que perder tiempo verificando si funciona bien
  3. Escribiremos mucho menos, porque un solo stored procedure parametrizado puede hacer el mismo trabajo que muchos stored procedures no parametrizados

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21

 

Anuncios