[firebase-br] Ajuda com procedure (parametro nao reconhece valor)

Magnun Oliveira magnunoliveira em gmail.com
Qua Set 23 08:38:31 -03 2009


Bom dia galera, estou com a seguinte situacao, e jah quebrei a cuca e nada
rsrsrs ... será que alguem pode me ajudar?

Tenho uma tabela de SERVICOS e uma de ITENS_SERVICOS, preciso exibir apenas
o ultimo item de cada servico.

isso eu faço atravez do SQL:


*select C.ID_SERVICO, C.SERVICO,**
*
* I.ID_ITEM_SERVICO, I.DESCRICAO_ITEM_SERVICO,**
** I.DATA_LANCAMENTO**
** from SERVICOS C,**
** ITENS_SERVICOS I**
** where C.ID_SERVICO = I.ID_SERVICO and**
** I.DATA_LANCAMENTO = (select max(DATA_LANCAMENTO) from ITENS_SERVICOS B
where B.ID_SERVICO = C.ID_SERVICO)*

funciona corretamente.

porem eu tenho uma tabela de PESSOAS -> FUNCIONARIOS -> RESPONSAVEIS ->
SERVICOS  e preciso saber os responsaveis por cada SERVICO.

isso eu faço atravez do seguinte SQL:

*select NOME from PESSOAS
inner join FUNCIONARIOS on FUNCIONARIOS.ID_FUNCIONARIO = PESSOAS.ID_PESSOA
inner join RESPONSAVEIS_SERVICOS on RESPONSAVEIS_SERVICOS.ID_FUNCIONARIO =
FUNCIONARIOS.ID_FUNCIONARIO
where RESPONSAVEIS_SERVICOS.ID_SERVICO = :ID_SERVICO*
*
*
fuinciona corretamente.*
*
*
*
Porem surgiu a necessidade de fazer a exibicao servico, do ultimo_item e
adicionar nessa listagem, um campo com os responsaveis pelo servico
CONCATENADOS em um unico campo. Resolvi utilizar uma procedure para tal.*
*

set term ^ ;

create or alter procedure servicos_itens_responsaveis
returns (
    ID_SERVICO integer,
    SERVICO varchar(100),
    ID_ITEM_SERVICO integer,
    DESCRICAO_ITEM_SERVICO varchar(100),
    DATA_LANCAMENTO date,
    RESPONSAVEIS varchar(100)
)
as
    declare variable NOME varchar(100);
    begin
        for select C.ID_SERVICO, C.SERVICO,
        I.ID_ITEM_SERVICO, I.DESCRICAO_ITEM_SERVICO,
        I.DATA_LANCAMENTO
        from SERVICOS C,
        ITENS_SERVICOS I
        where C.ID_SERVICO = I.ID_SERVICO and
        I.DATA_LANCAMENTO = (select max(DATA_LANCAMENTO) from ITENS_SERVICOS
B where B.ID_SERVICO = C.ID_SERVICO)
        into :ID_SERVICO, :SERVICO, :ID_ITEM_SERVICO,
:DESCRICAO_ITEM_SERVICO, :DATA_LANCAMENTO
        do
        begin
            RESPONSAVEIS = '';
            for select NOME from PESSOAS
            inner join FUNCIONARIOS on FUNCIONARIOS.ID_FUNCIONARIO =
PESSOAS.ID_PESSOA
            inner join RESPONSAVEIS_SERVICOS on
RESPONSAVEIS_SERVICOS.ID_FUNCIONARIO = FUNCIONARIOS.ID_FUNCIONARIO
            where RESPONSAVEIS_SERVICOS.ID_SERVICO = *:ID_SERVICO *into
:NOME
            do
            begin
                RESPONSAVEIS = RESPONSAVEIS || ' - ' || NOME;
            end
            RESPONSAVEIS = RESPONSAVEIS || ' - ' || :ID_SERVICO;
            suspend;
        end
    end^

set term ; ^

O problema ocorre no parametro :ID_SERVICO, ele tem seu valor exibido
corretamente no retorno do primeiro for select, porem o segundo for select
nao retorna valor nenhum, como se o parametro nao possuisse valor ou se o
valor nao existisse na tabela de responsaveis. O que nao ocorre se eu
substituí-lo por algum valor existente na tabela de SERVICOS.

Digamos que os SERVICO 1, 2 e 3 tenham RESPONSAVEIS associados a eles, mesmo
o primeiro for select retornando os valores 1, 2 e 3 para o :ID_SERVICO, nao
é gerado nenhum registro no segundo for select, porem se eu escrever o valor
1 no lugar de :ID_SERVICO, é retornado corretamente os RESPONSAVEIS pelo
SERVICO 1.

Alguem tem alguma ideia de onde estou fazendo *agada?

Obrigado.



Mais detalhes sobre a lista de discussão lista