Fala 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. [As partes desta mensagem que não continham texto foram removidas]