Verificando si la operación se realizó con éxito

2 comentarios

Cuando estamos dentro de un stored procedure o de un trigger o de un execute block. ¿Cómo podemos saber si la operación que realizamos (INSERT, UPDATE, DELETE, SELECT, FETCH) se realizó exitosamente o no?

Una forma muy sencilla es a través de la variable de contexto del Firebird ROW_COUNT, la cual guarda la cantidad de filas afectadas por la última de esas operaciones.

Ejemplo1:

UPDATE
   PRODUCTOS
SET
   PRD_PREVTA = PRD_PREVTA * 1.05
WHERE
   PRD_PREVTA < 1000

IF (ROW_COUNT = 0) THEN BEGIN
/* Aquí los comandos cuando no hubo actualización */
END

El UPDATE superior aumentará el precio de venta de los productos en un 5% para aquellos productos cuyo precio de venta sea menor que 1000.

Si ningún producto tenía un precio menor que 1000 entonces ningún precio de venta será actualizado y se entrará en el ciclo IF … BEGIN … END

Artículo relacionado:

El índice del blog Firebird21

Consultando con peso de las variables buscadas

1 comentario

A veces podemos necesitar realizar una consulta en la cual los resultados se muestren ordenados por la cantidad de ocurrencias de las variables buscadas.

Ejemplo:

Tenemos una tabla de PROVEEDORES que tiene las columnas Código del País, Código del Departamento (Estado o Provincia), Código de la Localidad.

Y lo que deseamos es que en la consulta se muestren en primer lugar los proveedores de la localidad especificada, luego los del departamento especificado y finalmente los del país especificado.

¿Por qué?

Porque debemos hacer un pedido de compras y necesitamos que la mercadería llegue lo más pronto posible, por lo tanto cuanto más cerca de nosotros está el proveedor es más probable que la mercadería llegue más rápido (si está a 2 km se supone que llegará más rápido que si está a 300 km).

Para ello, si una columna cumple con la condición le asignamos un número que es potencia de 2. Y si no la cumple, le asignamos el número 0. A la suma de todos esos valores le llamamos Peso.

Y en la consulta, mostramos primero los los pesos mayores.

SELECT
   (IIF(PRO_PAISXX =  595, 4, 0) +          -- Código del país
    IIF(PRO_CODDEP = '00', 2, 0) +          -- Código del departamento
    IIF(PRO_CODLOC = '01', 1, 0)) AS PESO,  -- Código de la localidad
   PRO_NOMBRE,
   PRO_TELEFO,
   PRO_EMAILX
FROM
   PROVEEDORES
ORDER BY
   1 DESCENDING

Como hay 3 columnas que nos interesan los valores sumados fueron 4, 2, 1. Si hubieran sido 4 columnas entonces usaríamos 8, 4, 2, 1. Con 5 columnas sería 16, 8, 4, 2, 1. Y así sucesivamente.

Como puedes ver, a algunas columnas se les dió más peso que a otras. En este ejemplo la más importante es el País, luego le sigue el Departamento y finalmente la Localidad. En otros casos podría ocurrir que todas las columnas tengan el mismo peso y entonces podrías asignarle un valor de 1 a cada una de ellas.

Por supuesto que esta misma técnica puedes usar con columnas de tipo carácter y las cláusulas LIKE, STARTING WITH, etc.

Artículos relacionados

El índice del blog Firebird21

Precaución para no dejar accesibles las bases de datos

7 comentarios

Si usas un programa de administración gráfica como el EMS SQL Manager o el IBExpert notarás que cada vez que ejecutas ese programa todas las bases de datos que habías dejado abiertas la última vez que las usaste están disponibles.

Eso es un riesgo potencial de seguridad porque cualquier persona con acceso a tu computadora podría ver esas bases de datos y por ignorancia o mala intención borrar o modificar los datos o los metadatos.

Por ejemplo, hace unos segundos al ejecutar el EMS SQL Manager esto es lo que ví:

PRECAUCION1

 

(si haces clic en la imagen la verás más grande)

simplemente con doble clic sobre el nombre de cualquiera de esas bases de datos bastaría para abrirla. Y una vez que está abierta la persona ignorante o malintencionada puede causar muchos problemas.

Por lo tanto, si además de tí alguien más puede usar tu computadora una elemental medida de precaución es cerrar todas esas bases de datos antes de salir del programa, o mejor aún desregistrar al host. Para ello:

PRECAUCION2

(si haces clic en la imagen la verás más grande)

 Y así podrás dormir tranquilo, porque si sales del EMS SQL Manager o del IBExpert sin tomar la precaución de desregistrar el host o las bases de datos podrías encontrarte con sorpresas muy desagradables al regresar.

Artículo relacionado:

El índice del blog Firebird21