Página principal
Artículos y trucos
Catálogo de productos
Ejemplos y descargas
Mis libros
Cursos de formación
Investigación y desarrollo
Libros recomendados
Mis páginas favoritas
Acerca del autor
 
En colaboración con Amazon
 
Intuitive Sight

Limitando el número de registros

... El espía se introdujo sigilosamente en la sala de ordenadores. Con paso felino se dirigió a una de las terminales de datos y la encendió. No tuvo problemas con la contraseña; el departamento de escuchas había interceptado la palabra clave hacía una semana gracias a una indiscreción telefónica de uno de los empleados de la Compañía. Una vez que la pantalla indicó que el sistema estaba listo, ordenó la ejecución del programa de accesos a la base de datos. Tenía que averiguar el nombre de algunas de las personas que habían sido utilizadas, sin su consentimiento, en los peligrosos experimentos biológicos. Tecleo una sencilla instrucción SQL y pulsó un botón con el ratón. De repente, se dio cuenta de que algo andaba mal. La pantalla vomitaba página tras página de datos, y no había forma de detenerla. Le quedaban dos minutos para apagar el ordenador, eliminar las huellas y salir corriendo. Pero aquel trasto seguía con su verborrea, insistiendo en mostrar todos los nombres de los afectados. Si aquello no se detenía, era hombre acabado.
Desesperado, sacó su Magnum de la cartuchera y disparó cuatro tiros a la maldita máquina ...

Para que usted no tenga que llegar a esos extremos, he aquí algunos trucos para limitar el número de filas que puede devolver una consulta SQL. Comencemos con SQL Server, donde podemos indicar la limitación mediante una cláusula especial después de la palabra select:

select top 25 *
from   Clientes

También podemos indicar un porcentaje del número total de registros:

select top 5 percent *
from   Clientes

En DB2, se puede utilizar una cláusula equivalente al final de la consulta:

select *
from   Clientes
fetch first 25 rows only

Oracle resuelve el problema gracias a una pseudo columna, de nombre rownum:

select *
from   Clientes
where  rownum <= 25

¿Y qué pasa con nuestro viejo amigo InterBase? Que no tiene operadores especiales para limitar el tamaño de una consulta. Para lograr un efecto semejante, debemos definir un procedimiento almacenado:

create procedure NPrimeros(N integer)
    returns (Nombre varchar(35), Direccion varchar(35)) as
begin
    for select Nombre, Direccion from Clientes
        into   :Nombre, :Direccion do
    begin
        suspend;
        N = N - 1;
        if (N = 0) then exit;
    end
end

Más adelante, podemos lanzar consultas como la siguiente:

select *
from   NPrimeros(25)

Así que si busque otra justificación si lo que desea es pegarle un tiro a su ordenador, pistolero ...