SP que faz loop em outra tabela

Firebird

18/10/2005

Galera estou quase a um dia tentando fazer uma SP onde eu procuro em diversas tabelas e trago somente quem tem lançamento BLZ é a primeira parte q tá certo, após isso preciso que a Primeira linha verifique em outra tabela se existe lançamentos e se não existir adicione pra mim na SP

assim:
[color=green:e386de504e]CREATE PROCEDURE TALHAO_TRATAMENTO (
SAFRA INTEGER,
CUL INTEGER,
VARI INTEGER,
INS VARCHAR(40))
RETURNS (
AREA_PLANTADA NUMERIC(15,4),
COD_SAFRA INTEGER,
COD_TALHAO INTEGER,
CULTURAS VARCHAR(70),
INDICE INTEGER,
TINDICE INTEGER,
TAREA NUMERIC(15,4),
TARRENDADO INTEGER,
TDESCRICAO VARCHAR(10),
INSUMO VARCHAR(50))
AS
begin
for select a.AREA_PLANTADA, a.COD_SAFRA, a.COD_TALHAO, a.CULTURAS, a.INDICE, a.TINDICE, a.TAREA, a.TARRENDADO, a.TDESCRICAO
from VTAHOES_SAFRA a, VCULTURA_TALHAO b, VV_TALHOES c, vplanilha_de_tarefa aa
where a.COD_SAFRA =:safra
and b.cod_safra =a.cod_safra
and b.cod_talhao=a.indice
and b.cod_cultura=:cul
and c.cod_safra = b.cod_safra
and c.cod_cultura = b.cod_cultura
and c.cod_talhao = b.cod_talhao
and c.cod_variedade = :vari
and aa.cod_safra = :safra
and aa.cod_atividade = 11
and aa.cod_talhao = a.cod_talhao
into :area_plantada,:cod_safra,:cod_talhao,:culturas,:indice,:tindice,:tarea ,:tarrendado,:tdescricao[/color:e386de504e]do
begin
[color=red:e386de504e]aki que não consigo fazer o loop e voltar as informaçoes que não existem pra Sp
for select descricao
from insumos_planilha ba
where ba.cod_safra=:safra
and ba.cod_talhao=:cod_talhao
and not :ins containing ba.cod_insumo
into :insumo do suspend;
end[/color:e386de504e]
[color=green:e386de504e]end[/color:e386de504e]


o primeiro select trás as informaçoes por ex:
Cultura Origem
Milho T-3
Soja T-6
Arroz T-8

ai eu preciso passar pelo Milho verificar se existe lançamento em uma Tabela chamanda ´insumos_planilha ba´ com as condições
safra=:safra
tal=:tal
not :ins containing cod_insumo // aki é o codigo de cada produto que vou verificar

então se eu pegar Milho e não encontrar nada lançado com o :par ele adicione uma linha!

e depois ele vai pro Soja

thanks


Marcos Fernando

Marcos Fernando

Curtidas 0

Respostas

Afarias

Afarias

18/10/2005

rapaz... tá difícil de entender...


mas acho q vc quer algo como:

{...}

select <alguma coisa de insumos_planilha>
where <usa parâmetros do primeiro select>
into :var1, :var2 ... ;

if (var1 is null) then  // não há o registro
  insert into <tabela> values (:var1, :var2, ...);

{...}



T+


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

18/10/2005

tente algo assim:

CREATE PROCEDURE TALHAO_TRATAMENTO ( 
  SAFRA INTEGER, 
  CUL INTEGER, 
  VARI INTEGER, 
  INS VARCHAR(40)) 
RETURNS ( 
  AREA_PLANTADA NUMERIC(15,4), 
  COD_SAFRA INTEGER, 
  COD_TALHAO INTEGER, 
  CULTURAS VARCHAR(70), 
  INDICE INTEGER, 
  TINDICE INTEGER, 
  TAREA NUMERIC(15,4), 
  TARRENDADO INTEGER, 
  TDESCRICAO VARCHAR(10), 
  INSUMO VARCHAR(50)) 
AS 
begin 
  for select
        a.AREA_PLANTADA, a.COD_SAFRA, a.COD_TALHAO,
        a.CULTURAS, a.INDICE, a.TINDICE, a.TAREA,
        a.TARRENDADO, a.TDESCRICAO 
      from
        VTAHOES_SAFRA a
      inner join
        VCULTURA_TALHAO b on (b.cod_safra =a.cod_safra and b.cod_talhao=a.indice)
      inner join
        VV_TALHOES c on (c.cod_safra = b.cod_safra and c.cod_cultura = b.cod_cultura
                         and c.cod_talhao = b.cod_talhao)
      inner join
        vplanilha_de_tarefa aa on (aa.cod_talhao = a.cod_talhao)
      where
        a.COD_SAFRA =:safra 
        and b.cod_cultura=:cul 
        and c.cod_variedade = :vari 
        and aa.cod_safra = :safra 
        and aa.cod_atividade = 11
  into :area_plantada,:cod_safra,:cod_talhao,:culturas,:indice,:tindice,
       :tarea ,:tarrendado,:tdescricao do
  begin 
    if not exists(select
                    descricao 
                  from
                    insumos_planilha
                  where
                    cod_safra=:safra 
                    and cod_talhao=:cod_talhao 
                    and :ins containing cod_insumo) then
      suspend; 
  end 
end



GOSTEI 0
Marcos Fernando

Marcos Fernando

18/10/2005

valeu pela força, Postei uma duvida bem complicada de entender mais vcs como sempre imbativéis.

Thanks


GOSTEI 0
POSTAR