Re: [oracle_br] Re: função recursiva
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
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
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
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
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