GARANTIR DESCONTO

Fórum Firebird existe o first, div, mod ? Como fazer ? #40366

26/11/2003

0

set term ! ;
create procedure sp_distfichas
(
filial integer
)
as
declare variable nrcontrato integer;
declare variable nrcobrador integer;
declare variable nrresto integer;
declare variable i_cont integer;
begin
i_cont= 1;
select count(cod_cob) from cobrador where cod_fil= :filial
into :nrcobrador;
select count(cod_cont) from cliente clien,contrato cont where clien.cod_clien=cont.cod_clien
and cod_cob is null into :nrcontrato;
nrcontrato= div(:nrcontrato,:nrcobrador);
nrresto= mod(:nrcontrato,:nrcobrador);
while (:i_cont<=:nrcontrato) do
begin
update contrato
set cod_cob= (select first 1 skip :i_cont cod_cob from cobrador where cod_fil= :filial)
where cod_cob is null;
i_cont= i_cont+1;
end
end!
set term ; !

Dúvidas :

Dá erro no comando FIRST, ele existe no firebird, se não, como fazer para pegar x registros de uma tabela ?
Esta procedure se refere a distribuição de fichas por cobrador.
Alguém tem uma idéia de como fazer uma procedure que funcione ?
Se não fui bem claro basta postar as perguntas que responda pra facilitar o entendimento.


Midas

Midas

Responder

Posts

26/11/2003

Afarias

o FB suporta sim o FIRST

qual a mensagem de erro exatamente??

t+


Responder

Gostei + 0

27/11/2003

Midas

ISC ERROR MESSAGE:
Dynamic SQL Error
SQL error code = -104
Token unknown - line 21, char 35
:

Statement: create procedure sp_distfichas

obs:
o erro ocorre justamente na linha
set cod_cob= (select first 1 skip :i_cont cod_cob from cobrador where cod_fil= :filial)
me parece que no :i_cont após o skip.


Responder

Gostei + 0

02/06/2009

Powerlog Tecnologia

[b:301fdb48be]Encontrei na net, acho legal colocar aqui para ter uma fonte de referência. No link tem dois artigos na íntegra. [/b:301fdb48be]

[url]http://www.4shared.com/file/109403947/2afb7750/FB-PROCEDURES.html[/url]

CREATE PROCEDURE FU_DIV(
WRAD INTEGER,
WDIV INTEGER)
RETURNS (
R_DIV INTEGER)
AS
begin
/*
Igual ao Delphi
*/
R_DIV = :WRAD / :WDIV;
suspend;



CREATE PROCEDURE FU_MOD(
WRAD INTEGER,
WDIV INTEGER)
RETURNS (
R_MOD INTEGER)
AS
begin
/*
Resto da divisão entre inteiros
*/
if(:wrad < :wdiv) then
r_mod = :wdiv;
else
R_MOD = :WRAD - ((:WRAD / :WDIV) * :WDIV);
suspend;
end



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar