Interbase - criar stored procedure para fazer o top

Top  Previous  Next

// criar stored procedure para top no interbase

 

CREATE PROCEDURE TOP( ROWS INTEGER )

RETURNS (CODIGO INTEGER, NOME CHAR(30), FONE CHAR(12))

AS

BEGIN

  IF (ROWS < 1) THEN EXIT;

 

  FOR SELECT CODIGO, NOME, FONE

  FROM AGENDA

  ORDER BY NOME

  INTO :CODIGO, :NOME, :FONE

  DO

    BEGIN

      SUSPEND;

      ROWS = ROWS - 1;

      IF (ROWS < 1) THEN EXIT;

    END

END

 

// ATENCAO: SE VC USA O FIREBIRD USE:

// select first (10) * from clientes <-- top 10

 

---------------------------------------------------- SAMPLE 2:

 

Retornando os primeiros N registros de um result set

By Inprise Developer Support Staff

 

Uma maneira para fazer isto é criar uma stored procedure que realize a

pesquisa necessária para retornar os N primeiros registros.

Aqui mostramos uma procedure que retorna os campos Employee Number,

FirstName e LastName dos registros encontrados na tabela Employee.

O parâmetro rows especifica quantos registros a procedure irá retornar.

 

procedure seria:

 

create procedure getemp ( rows integer )

returns (emp_no smallint, firstname varchar(15), lastname varchar(20))

as

begin

  if (rows < 1) then exit;

  for select emp_no, first_name, last_name

      from employee

      order by Last_name

      into :emp_no, :firstname, :lastname

  do

  begin

    suspend;

    rows = rows - 1;

   if (rows < 1) then exit;

  end

end

 

Agora, para retornar por exemplo os 10 primeiros registros da tabela

Employee faríamos:

 

select * from getemp(10);

 

--------------------------------------------------- SAMPLE 3

 

CREATE PROCEDURE spClientesPorDataCadastro ( DiaDoCadastro Date, RegistrosARetornar Int  )

RETURNS ( Id Int, Nome VarChar(50), DataNascimento Date  )

AS

DECLARE VARIABLE lRegistrosRetornados Int;

BEGIN

 lRegistrosRetornados = 0;

 

 FOR select id, nome, datanascimento from clientes where datacadastro = :DiaDoCadastro

        INTO :id, :nome, :datanascimento DO

 begin

   SUSPEND;

   lRegistrosRetornados = lRegistrosRetornados + 1;

   IF (lRegistrosRetornados = RegistrosARetornar) THEN

     EXIT;

 end

 

END

 

Um exemplo do uso seria: select * from

spClientesPorDataCadastro('11/12/2001'10)