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_br@yahoogrupos.com.br <oracle_br%40yahoogrupos.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.maisbuscados.yahoo.com > > [As partes desta mensagem que não continham texto foram removidas] > > > [As partes desta mensagem que não continham texto foram removidas]