[firebase-br] Laço de repetição

Isael Faria Junior isael em stetika.com.br
Ter Mar 10 15:10:02 -03 2009


vc esta declarando antes do begin  e depois do AS ?

Segue exemplo em uma procedure :

CREATE PROCEDURE SP_GERA_LIBERACAO (
    COD_PROPOSTA DOUBLE PRECISION,
    COD_REVISAO DOUBLE PRECISION)
AS
DECLARE VARIABLE DATA_LIMITE DATE;
DECLARE VARIABLE ID_PATRIMONIO_SIMPLES INTEGER;
DECLARE VARIABLE ID_PRODUTO INTEGER;
DECLARE VARIABLE SIT_QTD VARCHAR(1);
DECLARE VARIABLE I INTEGER;
DECLARE VARIABLE QTD DOUBLE PRECISION;
DECLARE VARIABLE PRCUSTO DOUBLE PRECISION;
DECLARE VARIABLE DESCRICAO VARCHAR(50);
DECLARE VARIABLE SIT_TIPO VARCHAR(1);
DECLARE VARIABLE VAL_UNIT DOUBLE PRECISION;
begin
  /* Procedure Text */
  FOR SELECT A.descricao, A.qtd_item_locacao,A.id_patrimonio_simples,
       a.val_unitario
   FROM ite_patr_prop A WHERE A.cod_proposta = :cod_proposta AND
  A.cod_revisao = :cod_revisao INTO :descricao,:qtd,:id_patrimonio_simples,
   :val_unit DO
  BEGIN
    I = 0;
    I = 0;

    SELECT P.dat_limite FROM PROPOSTA P WHERE P.cod_proposta = 
:cod_proposta AND
        P.cod_revisao = :cod_revisao INTO :data_limite;

    SELECT B.qtd,B.sit_tipo,b.id_produto FROM patrimonio_simples B WHERE
        B.id_patrimonio_simples = :id_patrimonio_simples
        into :sit_qtd,:sit_tipo,:id_produto;
    if (:sit_qtd IS NULL) then
      sit_qtd = 'N';

   if (sit_tipo = '2') then
   begin
    if (:sit_qtd = 'S') then
    BEGIN
      WHILE (I<:qtd) DO
      BEGIN
        INSERT INTO 
ITE_LIB_PROP(COD_PROPOSTA,COD_REVISAO,DESCRICAO,qtd,id_patrimonio_simples,DATA_LIMITE)
        
VALUES(:cod_proposta,:cod_revisao,:descricao,1,:id_patrimonio_simples,:data_limite);
        I = I+1;
      END
    END
    if (:sit_qtd = 'N') then
    BEGIN
        INSERT INTO 
ITE_LIB_PROP(COD_PROPOSTA,COD_REVISAO,DESCRICAO,qtd,id_patrimonio_simples,DATA_LIMITE)
        
VALUES(:cod_proposta,:cod_revisao,:descricao,:qtd,:id_patrimonio_simples,:data_limite);
    END
   END
   if (sit_tipo = '1' ) then
   begin
        SELECT DESCRICAO,PRCUSTO FROM PRODUTOS WHERE ID_PRODUTO = 
:id_produto INTO :descricao,:prcusto;
        INSERT INTO 
ITE_LIB_PRODUTO(COD_PROPOSTA,COD_REVISAO,id_produto,DESCRICAO,
            qtd,VAL_UNITARIO,VAL_TOTAL,VALOR_UNIT_CONTR)
        VALUES(:cod_proposta,:cod_revisao,:id_produto,:descricao,
            :qtd,:prcusto,(:qtd*:prcusto),:val_unit);
   end
  END
  suspend;
end

Juvencio Leite escreveu:
> ISSO NO FB 1.5 ? obs: como eu declaro variavel? tentei: DECLARE
> VARIABLE codigo integer; mas não funcionou.
>
> 2009/3/10 Isael Faria Junior <isael em stetika.com.br>:
>   
>> Para while :
>> while (v1 < v2) do
>> begin
>>
>> end;
>>
>> Para For
>>
>> for select campo from tabela into : parametro do
>> begin
>>
>> end;
>>
>>
>> Juvencio Leite escreveu:
>>     
>>> Boa tarde, galera, estou convertendo um script de sql server para
>>> firebird e gostaria de saber como eu faço um laço de repetição no
>>> firebird?
>>>
>>>
>>>       
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>> http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>
>>     
>
>
>
>   




Mais detalhes sobre a lista de discussão lista