Corre esta query pra você ver como é que fica. SELECT RPAD(’ ‘, LEVEL*4 -4 ) ||codigo FROM tabela CONNECT BY PRIOR codigopai = codigo START WITH codigopai IS NOT NULL
________________________________ De: Roberto Souza Silva <rssp...@gmail.com> Para: oracle_br@yahoogrupos.com.br Enviadas: Quinta-feira, 6 de Agosto de 2009 16:50:03 Assunto: Re: [oracle_br] Função recursiva com CURSOR Boa tarde a todos. Elis, acabei resolvendo o problema implementando a maneira como eu estava tratando o cursor. Agora está funcionando perfeitamente. Veja como ficou a implementação: function Filhos(i integer) return varchar2 as CURSOR crCodigos(p1 in integer) IS SELECT codigo FROM tabela where codigopai=p1; rr crCodigos%rowtype; vs varchar2(1000) ; vi integer; begin open crCodigos(i) ; loop fetch crCodigos into rr; exit when (crCodigos%notfound ); if vs is null then vs:=','||rr. codigo||Filhos( rr.codigo) ; else vs:=vs||','| |rr.codigo| |Filhos(rr. codigo); end if; end loop; close crCodigos; return vs; end; Não faço a mínima idéia do uso de connect by. Seria possível você me dar um pequeno exemplo? Muito obrigado pela atenção. Abraços Roberto 2009/8/6 Elis Azevedo Nery <elisn...@yahoo. com> > > > Com connect by você não consegue resolver o seu problema? > > ____________ _________ _________ __ > De: Roberto Souza Silva <rssp...@gmail. com <rssprog%40gmail. com>> > Para: oracle...@yahoogrup os.com.br <oracle_br%40yahoog rupos.com. br> > Enviadas: Quarta-feira, 5 de Agosto de 2009 20:57:10 > Assunto: [oracle_br] Função recursiva com CURSOR > > > Caros amigos, boa tarde. > > Estou tendo alguns problemas com recursividade. > Vejam o código abaixo: > > CREATE OR REPLACE FUNCTION teste(piCodigo IN integer, piCodigoPai IN > integer) RETURN VARCHAR2 AS > vsResult VARCHAR2(4000) ; > -- > FUNCTION Filhos(i INTEGER) RETURN VARCHAR2 AS > vs VARCHAR2(1000) ; > vi INTEGER; > CURSOR crCodigos(p1 IN INTEGER) IS > SELECT codigo FROM tabela WHERE codigopai=p1; > BEGIN > FOR x IN crCodigos(i) LOOP > if vs is null then > vs:=x.codigo| |','||Filhos( x.codigo) ; > ELSE > vs:=vs||','| |x.codigo| |','||Filhos( x.codigo) ; > END IF; > END LOOP; > CLOSE crCodigos; > RETURN vs; > END; > -- > BEGIN > . > . > vsResult:=Filhos( piCodigo) ; > . > . > RETURN vsResult; > END teste3; > > Bem, não sei se deu para ficar claro, mas o que quero é correr uma tabela > que tem uma FK para ela mesma. > O problema com o código acima é o ORA-06511 (curso já está aberto). > Tentei implementar TYPEs, mas me faltam conhecimentos para lidar com eles. > Procurei na lista por "recursiva" e não encontrei nada a respeito. > Logo não me restou alternativa, tenho que pedir ajuda dos universitários. > ehhe > > Alguém feria a gentileza? > > Forte abraço a todos e obrigado. > > Roberto > > [As partes desta mensagem que não continham texto foram removidas] > > ____________ _________ _________ _________ _________ _________ _ > Veja quais são os assuntos do momento no Yahoo! +Buscados > http://br.maisbusca dos.yahoo. com > > [As partes desta mensagem que não continham texto foram removidas] > > > [As partes desta mensagem que não continham texto foram removidas] ____________________________________________________________________________________ Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com [As partes desta mensagem que não continham texto foram removidas]