Re: [oracle_br] Re: função recursiva

2005-11-23 Por tôpico Rafael
Olá, consegui avanços, abaixo o código de uma função inútil, é soh didatica...

number_t é um tipo table of number
---
create or replace function teste_recursivo(valor in number) return
number_t pipelined is
  TYPE curtype IS REF CURSOR;
  recCursor curtype;
  novo_valor number;
  strSql varchar2(300);
begin
  strSql := 'select '|| valor || ' + 1 from dual UNION ALL select '||
valor || ' + 3 from dual ';
  if valor  10 then
 open recCursor for strSql;
 loop
 fetch recCursor into novo_valor;
 EXIT WHEN recCursor%NOTFOUND;
 pipe row(novo_valor);
--  o meu problema agora está aqui, se eu tento gerar a recursividade
chamando a função
-- dessa forma, ele retorna o erro: teste_recursivo is not a
procedure or in undefined
-- teste_recursivo(novo_valor) ;
-- e se eu chamo de outra maneira, considerando que eu declarei lah em cima uma
-- variavel retFunc como sendo number_t, os valores não são exibidos
depois quando
-- eu executo essa função (select * from table(teste_recursivo(5));)
--  select teste_recursivo(novo_valor) into retFunc from dual;
 end loop;
 close recCursor;
  end if;
  return;
end teste_recursivo;

---

Gostaria que me alguem me indicasse onde eu posso encontrar ou como eu
posso fazer para chamar a função dentro dela mesmo, considerando que
eh uma função pipelined.
Na verdade, eu consigo gerar a recursividade, só que apenas os valores
da primeira chamada da função, a que eu faço, são retornados, os
valores quando ela esta se chamando não são retornados

Grato,

-- Rafael


Em 22/11/05, Marcio Portes[EMAIL PROTECTED] escreveu:
 Acho que voce quer função pipelined.
 veja exemplo em:
 http://mportes.blogspot.com/2005/05/pipelined-function.html

 --- Em oracle_br@yahoogrupos.com.br, 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
 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

 





[oracle_br] Re: função recursiva

2005-11-23 Por tôpico Marcio Portes
vixe! ;)

Explica ai melhor em portugues o que voce quer testar que a lista 
escreve a função.



--- Em oracle_br@yahoogrupos.com.br, Rafael [EMAIL PROTECTED] escreveu
 Olá, consegui avanços, abaixo o código de uma função inútil, é soh 
didatica...
 
 number_t é um tipo table of number
 ---
 create or replace function teste_recursivo(valor in number) return
 number_t pipelined is
   TYPE curtype IS REF CURSOR;
   recCursor curtype;
   novo_valor number;
   strSql varchar2(300);
 begin
   strSql := 'select '|| valor || ' + 1 from dual UNION ALL 
select '||
 valor || ' + 3 from dual ';
   if valor  10 then
  open recCursor for strSql;
  loop
  fetch recCursor into novo_valor;
  EXIT WHEN recCursor%NOTFOUND;
  pipe row(novo_valor);
 --  o meu problema agora está aqui, se eu tento gerar a 
recursividade
 chamando a função
 -- dessa forma, ele retorna o erro: teste_recursivo is not a
 procedure or in undefined
 -- teste_recursivo(novo_valor) ;
 -- e se eu chamo de outra maneira, considerando que eu declarei lah 
em cima uma
 -- variavel retFunc como sendo number_t, os valores não são exibidos
 depois quando
 -- eu executo essa função (select * from table(teste_recursivo(5));)
 --  select teste_recursivo(novo_valor) into retFunc from dual;
  end loop;
  close recCursor;
   end if;
   return;
 end teste_recursivo;
 
 ---
 
 Gostaria que me alguem me indicasse onde eu posso encontrar ou como 
eu
 posso fazer para chamar a função dentro dela mesmo, considerando que
 eh uma função pipelined.
 Na verdade, eu consigo gerar a recursividade, só que apenas os 
valores
 da primeira chamada da função, a que eu faço, são retornados, os
 valores quando ela esta se chamando não são retornados
 
 Grato,
 
 -- Rafael
 
 
 Em 22/11/05, Marcio Portes[EMAIL PROTECTED] escreveu:
  Acho que voce quer função pipelined.
  veja exemplo em:
  http://mportes.blogspot.com/2005/05/pipelined-function.html
 
  --- Em oracle_br@yahoogrupos.com.br, 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
  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] Re: função recursiva

2005-11-23 Por tôpico Rafael
Estou criando uma função que percorre uma árvore em profundidade :D
claramente não é o que o exemplo faz, mas é só um modelo

O problema ali é, quando eu chamo a função, ela passa no pipe
row(novo_valor) e me retorna esse valor, logo abaixo a função executa
ela mesma (select teste_recursivo(novo_valor) into retFunc from
dual) e esses valores não são retornados.
Acredito que esses valor não são retornados porque eu faço o select.. into

contudo eu não achei outra maneira de fazer a chamada da função dentro
dela mesma (gerando a recursividade)

Bem, o que não ficou claro, eu tento explicar melhor :D

Abraços

-- Rafael



Em 23/11/05, Marcio Portes[EMAIL PROTECTED] escreveu:
 vixe! ;)

 Explica ai melhor em portugues o que voce quer testar que a lista
 escreve a função.



 --- Em oracle_br@yahoogrupos.com.br, Rafael [EMAIL PROTECTED] escreveu
  Olá, consegui avanços, abaixo o código de uma função inútil, é soh
 didatica...
 
  number_t é um tipo table of number
  ---
  create or replace function teste_recursivo(valor in number) return
  number_t pipelined is
TYPE curtype IS REF CURSOR;
recCursor curtype;
novo_valor number;
strSql varchar2(300);
  begin
strSql := 'select '|| valor || ' + 1 from dual UNION ALL
 select '||
  valor || ' + 3 from dual ';
if valor  10 then
   open recCursor for strSql;
   loop
   fetch recCursor into novo_valor;
   EXIT WHEN recCursor%NOTFOUND;
   pipe row(novo_valor);
  --  o meu problema agora está aqui, se eu tento gerar a
 recursividade
  chamando a função
  -- dessa forma, ele retorna o erro: teste_recursivo is not a
  procedure or in undefined
  -- teste_recursivo(novo_valor) ;
  -- e se eu chamo de outra maneira, considerando que eu declarei lah
 em cima uma
  -- variavel retFunc como sendo number_t, os valores não são exibidos
  depois quando
  -- eu executo essa função (select * from table(teste_recursivo(5));)
  --  select teste_recursivo(novo_valor) into retFunc from dual;
   end loop;
   close recCursor;
end if;
return;
  end teste_recursivo;
 
  ---
 
  Gostaria que me alguem me indicasse onde eu posso encontrar ou como
 eu
  posso fazer para chamar a função dentro dela mesmo, considerando que
  eh uma função pipelined.
  Na verdade, eu consigo gerar a recursividade, só que apenas os
 valores
  da primeira chamada da função, a que eu faço, são retornados, os
  valores quando ela esta se chamando não são retornados
 
  Grato,
 
  -- Rafael
 
 
  Em 22/11/05, Marcio Portes[EMAIL PROTECTED] escreveu:
   Acho que voce quer função pipelined.
   veja exemplo em:
   http://mportes.blogspot.com/2005/05/pipelined-function.html
  
   --- Em oracle_br@yahoogrupos.com.br, 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
   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










--
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:

Re: [oracle_br] Re: função recursiva

2005-11-23 Por tôpico Rafael
Ah, eu sei que posso percorrer uma arvore usando o start with / connect by
mas preciso aplicar algumas restrições diferentes, e o start
with/connect by não são suficientes.

Grato,

-- Rafael

Em 23/11/05, Rafael[EMAIL PROTECTED] escreveu:
 Estou criando uma função que percorre uma árvore em profundidade :D
 claramente não é o que o exemplo faz, mas é só um modelo

 O problema ali é, quando eu chamo a função, ela passa no pipe
 row(novo_valor) e me retorna esse valor, logo abaixo a função executa
 ela mesma (select teste_recursivo(novo_valor) into retFunc from
 dual) e esses valores não são retornados.
 Acredito que esses valor não são retornados porque eu faço o select.. into

 contudo eu não achei outra maneira de fazer a chamada da função dentro
 dela mesma (gerando a recursividade)

 Bem, o que não ficou claro, eu tento explicar melhor :D

 Abraços

 -- Rafael



 Em 23/11/05, Marcio Portes[EMAIL PROTECTED] escreveu:
  vixe! ;)
 
  Explica ai melhor em portugues o que voce quer testar que a lista
  escreve a função.
 
 
 
  --- Em oracle_br@yahoogrupos.com.br, Rafael [EMAIL PROTECTED] escreveu
   Olá, consegui avanços, abaixo o código de uma função inútil, é soh
  didatica...
  
   number_t é um tipo table of number
   ---
   create or replace function teste_recursivo(valor in number) return
   number_t pipelined is
 TYPE curtype IS REF CURSOR;
 recCursor curtype;
 novo_valor number;
 strSql varchar2(300);
   begin
 strSql := 'select '|| valor || ' + 1 from dual UNION ALL
  select '||
   valor || ' + 3 from dual ';
 if valor  10 then
open recCursor for strSql;
loop
fetch recCursor into novo_valor;
EXIT WHEN recCursor%NOTFOUND;
pipe row(novo_valor);
   --  o meu problema agora está aqui, se eu tento gerar a
  recursividade
   chamando a função
   -- dessa forma, ele retorna o erro: teste_recursivo is not a
   procedure or in undefined
   -- teste_recursivo(novo_valor) ;
   -- e se eu chamo de outra maneira, considerando que eu declarei lah
  em cima uma
   -- variavel retFunc como sendo number_t, os valores não são exibidos
   depois quando
   -- eu executo essa função (select * from table(teste_recursivo(5));)
   --  select teste_recursivo(novo_valor) into retFunc from dual;
end loop;
close recCursor;
 end if;
 return;
   end teste_recursivo;
  
   ---
  
   Gostaria que me alguem me indicasse onde eu posso encontrar ou como
  eu
   posso fazer para chamar a função dentro dela mesmo, considerando que
   eh uma função pipelined.
   Na verdade, eu consigo gerar a recursividade, só que apenas os
  valores
   da primeira chamada da função, a que eu faço, são retornados, os
   valores quando ela esta se chamando não são retornados
  
   Grato,
  
   -- Rafael
  
  
   Em 22/11/05, Marcio Portes[EMAIL PROTECTED] escreveu:
Acho que voce quer função pipelined.
veja exemplo em:
http://mportes.blogspot.com/2005/05/pipelined-function.html
   
--- Em oracle_br@yahoogrupos.com.br, 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
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
 
 
 
 
 
 
 
 



--
Atenção! As mensagens deste grupo são de acesso público e de inteira 
responsabilidade de seus remetentes.
Acesse: 

[oracle_br] Re: função recursiva

2005-11-22 Por tôpico Marcio Portes
Acho que voce quer função pipelined.
veja exemplo em:
http://mportes.blogspot.com/2005/05/pipelined-function.html

--- Em oracle_br@yahoogrupos.com.br, 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  
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