Re: [oracle_br] Função recursiva com CURSOR

2009-08-06 Por tôpico Roberto Souza Silva
Nossa Elis, show de bola.
Vou me aprofundar mais nesse connect by.

Valeu a dica e precisando de algo, estou a disposição.

Abraços e boa sorte

Roberto

2009/8/6 Elis Azevedo Nery 

>
>
> 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 >
> 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 
>
> >
> >
> > Com connect by você não consegue resolver o seu problema?
> >
> >  _ _ __
> > De: Roberto Souza Silva >
> > Para: oracle...@yahoogrup os.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]
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]





--
>Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira 
>responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--
>Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » 
>Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: 
>http://www.oraclebr.com.br/  

 Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
oracle_br-unsubscr...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html




Re: [oracle_br] Função recursiva com CURSOR

2009-08-06 Por tôpico Roberto Souza Silva
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 

>
>
> Com connect by você não consegue resolver o seu problema?
>
> 
> De: Roberto Souza Silva >
> Para: oracle_br@yahoogrupos.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]



Re: [oracle_br] função recursiva

2005-11-22 Por tôpico Rafael
não, pq assim retornaria uma variavel com os valores concatenados, e
eu preciso cada resultado em uma linha diferente


Em 22/11/05, Roberto Oshikawa<[EMAIL PROTECTED]> escreveu:
> Rafael,
>  Vc já tentou usar dentro de um "FOR" ??
>  FOR 1..n
> loop
>  variavel := variaval || fn_Recursiva();
>  end loop;
>
>  Em 22/11/05, Rafael <[EMAIL PROTECTED]> escreveu:
> >
> > Olá,
> >
> > alguém poderia me enviar um exemplo de um função recursiva que retorne
> > várias tuplas?
> >
> > explicando melhor, a cada chamada da função, ela deve retornar 1
> > valor, então chama-lá recursivamente até um valor n, tendo no final n
> > linhas retornadas.
> >
> > Grato,
> >
> > -- Rafael
> >
> >
> >
> > --
> > Atenção! As mensagens deste grupo são de acesso público e de inteira
> > responsabilidade de seus remetentes.
> > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
> >
> > --_
> > Area de download do grupo - http://www.4shared.com/dir/101727/a4dcc423
> >
> >
> >   *Yahoo! Grupos, um serviço oferecido por:*   PUBLICIDADE
> >
> > 
> > --
> > *Links do Yahoo! Grupos*
> >
> >- Para visitar o site do seu grupo na web, acesse:
> >http://br.groups.yahoo.com/group/oracle_br/
> >- Para sair deste grupo, envie um e-mail para:
> >[EMAIL PROTECTED]<[EMAIL PROTECTED]>
> >- O uso que você faz do Yahoo! Grupos está sujeito aos Termos do
> >Serviço do Yahoo! .
> >
> >
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
> --
> Atenção! As mensagens deste grupo são de acesso público e de inteira 
> responsabilidade de seus remetentes.
> Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
> --_
> Area de download do grupo - http://www.4shared.com/dir/101727/a4dcc423
> Links do Yahoo! Grupos
>
>
>
>
>
>
>
>


--
Atenção! As mensagens deste grupo são de acesso público e de inteira 
responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--_
Area de download do grupo - http://www.4shared.com/dir/101727/a4dcc423  
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html

 





Re: [oracle_br] função recursiva

2005-11-22 Por tôpico Roberto Oshikawa
Rafael,
 Vc já tentou usar dentro de um "FOR" ??
 FOR 1..n
loop
 variavel := variaval || fn_Recursiva();
 end loop;

 Em 22/11/05, Rafael <[EMAIL PROTECTED]> escreveu:
>
> Olá,
>
> alguém poderia me enviar um exemplo de um função recursiva que retorne
> várias tuplas?
>
> explicando melhor, a cada chamada da função, ela deve retornar 1
> valor, então chama-lá recursivamente até um valor n, tendo no final n
> linhas retornadas.
>
> Grato,
>
> -- Rafael
>
>
>
> --
> Atenção! As mensagens deste grupo são de acesso público e de inteira
> responsabilidade de seus remetentes.
> Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
>
> --_
> Area de download do grupo - http://www.4shared.com/dir/101727/a4dcc423
>
>
>   *Yahoo! Grupos, um serviço oferecido por:*   PUBLICIDADE
>
> 
> --
> *Links do Yahoo! Grupos*
>
>- Para visitar o site do seu grupo na web, acesse:
>http://br.groups.yahoo.com/group/oracle_br/
>- Para sair deste grupo, envie um e-mail para:
>[EMAIL PROTECTED]<[EMAIL PROTECTED]>
>- O uso que você faz do Yahoo! Grupos está sujeito aos Termos do
>Serviço do Yahoo! .
>
>


[As partes desta mensagem que não continham texto foram removidas]



--
Atenção! As mensagens deste grupo são de acesso público e de inteira 
responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--_
Area de download do grupo - http://www.4shared.com/dir/101727/a4dcc423  
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html