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]

Responder a