Ver Mensaje Individual
  #4  
Antiguo 04-05-2007
TJose TJose is offline
Miembro
 
Registrado: may 2003
Posts: 162
Reputación: 22
TJose Va por buen camino
Hola

first funciona a partir de la versión 1.0 de firebird, no estaba disponible en interbase, por eso el error que te produce.

el siguiente fragmento pertenece a The Dark Side of CppB de Ian Marteens

Cita:
Otro ejemplo: necesitamos conocer los diez mejores clientes de nuestra tienda. Pero
sólo los diez primeros, y no vale mirar hacia otro lado cuando aparezca el undécimo.
Algunos sistemas SQL tienen extensiones con este propósito (top en SQL Server;
fetch first en DB2), pero no InterBase. Este procedimiento, que devuelve un con-
junto de datos, nos servirá de ayuda:

Código SQL [-]
create procedure MejoresClientes(Rango integer)
returns (Codigo int, Nombre varchar(30), Total int) as
begin
for select Codigo, Nombre, sum(Total)
    from   Clientes, Pedidos
    where  Clientes.Codigo = Pedidos.Cliente
    order  by 3 desc
    into   :Codigo, :Nombre, :Total do
begin
suspend;
Rango = Rango - 1;
if (Rango = 0) then
exit;
end
end ^

Entonces podremos realizar consultas como la siguiente:

Código SQL [-]
select *
from   MejoresClientes(10)
Una cosa interesante, disponible en FB es la combinación de first con skip

Saludos
TJose
Responder Con Cita