Willie 0 Denunciar post Postado Novembro 10, 2006 Preciso concatenar um campo que contém a descrição de componentes de um produto, logo: Tabela COMPONENTE+-----------+------------+--------------+| produto | componente | descricao |+-----------+------------+--------------+| 123456 | 2 | PUXADOR |+-----------+------------+--------------+| 123456 | 3 | CAVILHA |+-----------+------------+--------------+| 123456 | 4 | TAPA-FURO |+-----------+------------+--------------+ Como fazer uma consulta que me retorne: +----------------------------------------+| descricao |+----------------------------------------+| PUXADOR, CAVILHA, TAPA-FURO |+----------------------------------------+Ou seja, a concatenação de strings da coluna descricao de todos os registros selecionados. Compartilhar este post Link para o post Compartilhar em outros sites
Giovani Campêlo 0 Denunciar post Postado Novembro 10, 2006 Ficaria mais ou menos assim:SELECT produto + ', ' + componente + ', ' + descricao FROM COMPONENTE; Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Novembro 10, 2006 Vide este tópico : http://forum.imasters.com.br/index.php?sho...amp;hl=Function Compartilhar este post Link para o post Compartilhar em outros sites
Willie 0 Denunciar post Postado Novembro 10, 2006 Motta, tem como eu aproveitar esta string retornada em uma outra stored procedure chamando esta funcao para cada registro de um cursor criado na procedure e anexar a string ao registro, ou seja, inclui-lo no resultado do cursor? Colunas da consulta apontada pelo cursor da procedure: +-----------+| produto |+-----------+| 123456 |+-----------+| 123457 |+-----------+| 123458 |+-----------+Conteúdo do cursor após anexar a string: +-----------+-----------------------------+| produto | descricao |+-----------+-----------------------------+| 123456 | PUXADOR, SAPATA |+-----------+-----------------------------+| 123457 | CAVILHA, BORDA, PAINEL |+-----------+-----------------------------+| 123458 | TAPA-FURO |+-----------+-----------------------------+ Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Novembro 10, 2006 Seria criar uma FUNCTION e chama-la no select, a FUNCTION receberia o codigo como parametro CREATE OR REPLACE FUNCTION itens( paramp IN number) RETURN VARCHAR2 IS -- -- Retorna uma string Cursor c1 is Select descricao From produto where codigo= paramp; Saida VARCHAR2(200); BEGIN Saida:= ' '; FOR r1 In c1 LOOP Saida := saida || r1.descricao; END LOOP; RETURN TRIM(Saida); END; select codigo,itens(codigo) itens from .... ok ? Compartilhar este post Link para o post Compartilhar em outros sites
Willie 0 Denunciar post Postado Dezembro 18, 2006 Motta beleza!Gostaria de saber uma coisinha pra completar este exemplo que me deu...Não sei o tamanho que a string saida vai ficar existe um tipo de dados com alocação dinâmica? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Dezembro 18, 2006 Defina a saida como string limitando o tamanho , se estourar dará erro na rotina , você pode tratar o tamanho pelo comando length. CREATE OR REPLACE FUNCTION itens( paramp IN number) RETURN VARCHAR2 IS -- -- Retorna uma string Cursor c1 is Select descricao From produto where codigo= paramp; Saida VARCHAR2(200); BEGIN Saida:= ' '; FOR r1 In c1 LOOP if length(saida || r1.descricao) < 200 then Saida := saida || r1.descricao; END LOOP; RETURN TRIM(Saida); END; Uma dica é criar a rotina e testar o pior caso via select (sqlplus por exemplo) select max(length(itens(produto))) from produto Sabendo o pior caso fica + fácil definir uma solução Compartilhar este post Link para o post Compartilhar em outros sites