Firebird existe o first, div, mod ? Como fazer ?
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.
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
Curtidas 0
Respostas
Afarias
26/11/2003
o FB suporta sim o FIRST
qual a mensagem de erro exatamente??
t+
qual a mensagem de erro exatamente??
t+
GOSTEI 0
Midas
26/11/2003
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.
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.
GOSTEI 0
Powerlog Tecnologia
26/11/2003
[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]
[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
GOSTEI 0