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.
A 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) |