E como criar um índice numa tabela temporária?
Usando create index normalmente, como se fosse em uma tabela "física"? E a performance do índice? Abraços, Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: [EMAIL PROTECTED] De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de Robert Anderson Enviada em: sexta-feira, 14 de novembro de 2008 10:36 Para: oracle_br@yahoogrupos.com.br Assunto: Re: RES: [oracle_br] Tabela temporária José, acho que você ainda não pegou o espírito da coisa. :) Com essa técnica você pode fazer qualquer coisa, tudo é uma questão de combinar as coisas certas nos lugares certos. Perguntas que você tem que se fazer: O que eu quero processar das tabelas? (Provavelmente, vai resolver com instruções SQL) O que quero deixar na memória? (Essa informação vai te dizer a estrutura do registro para armazenamento em memória) O que quero processar na memória? (Vai guardando no hash baseado no registro criado no passo anterior) O que quero fazer com o resultado? (Processo dentro do for, percorrendo a tabela em memória) Em todo tempo que trabalho com banco, nunca vi nada que não seja possível fazer utilizando dessas técnicas. :) 2008/11/14 José Costacurta <[EMAIL PROTECTED] <mailto:jose_costacurta%40yahoo.com.br> > > Então... na verdade eu precisaria fazer o select NO type. > > Algo do tipo: > > > procedure demo( ) > is > TYPE t_rec_demo IS RECORD (num1 number, num2 number); > TYPE t_vet_tar is table of tarifas.valor%type index by binary_integer; > tab t_vet_tar; > begin > > select max(coluna1) + 3/2, avg(coluna3) bulk collect into tab > from tabela_demo > order by 1; > > --Aqui meu select > > For n in ( > > Select sum(coluna1) soma, coluna2 > > From tab > > Group by coluna2) loop > > --aqui qualquer código > > End loop; > > end; > > Entendeu? Pelo menos até agora não descobri nada do tipo pra fazer esse > select. > > Valeu! Abraços. > > De: oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> > <oracle_br%40yahoogrupos.com.br> [mailto: > oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> > <oracle_br%40yahoogrupos.com.br>] Em > nome de Robert Anderson > Enviada em: sexta-feira, 14 de novembro de 2008 10:21 > Para: oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> > <oracle_br%40yahoogrupos.com.br> > Assunto: Re: RES: [oracle_br] Tabela temporária > > Por que não conseguiria? > > Imagine o seguinte: > > procedure demo( ) > is > TYPE t_rec_demo IS RECORD (num1 number, num2 number); > TYPE t_vet_tar is table of tarifas.valor%type index by binary_integer; > tab t_vet_tar; > begin > > select max(coluna1) + 3/2, avg(coluna3) bulk collect into tab > from tabela_demo > order by 1; > > for i in tab.first..tab.last loop > dbms_output.put_line(tab(i).num1 || ' ' || tab(i).num2); > end; > end; > > Não resolveria o seu problema? > > 2008/11/14 José Costacurta <[EMAIL PROTECTED] > <mailto:jose_costacurta%40yahoo.com.br> <jose_costacurta%40yahoo.com.br> > <mailto:jose_costacurta%40yahoo.com.br <jose_costacurta%2540yahoo.com.br>> > > > > > Ótima idéia Robert. > > > > Porém, eu não conseguiria fazer um select nesse type. E é essa minha > > necessidade, fazer um select somando e agrupando valores. > > > > Valeu. Abraço. > > > > De: oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> > > <oracle_br%40yahoogrupos.com.br><mailto: > oracle_br%40yahoogrupos.com.br <oracle_br%2540yahoogrupos.com.br>> > <oracle_br%40yahoogrupos.com.br> [mailto: > > oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> > > <oracle_br%40yahoogrupos.com.br> <mailto: > oracle_br%40yahoogrupos.com.br <oracle_br%2540yahoogrupos.com.br>> > <oracle_br%40yahoogrupos.com.br>] Em > > nome de Robert Anderson > > Enviada em: sexta-feira, 14 de novembro de 2008 10:02 > > > > Para: oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> > > <oracle_br%40yahoogrupos.com.br><mailto: > oracle_br%40yahoogrupos.com.br <oracle_br%2540yahoogrupos.com.br>> > <oracle_br%40yahoogrupos.com.br> > > Assunto: Re: RES: [oracle_br] Tabela temporária > > > > Em seu caso, usaria uma Tabela PL/SQL (Hash) > > > > TYPE <nome do tipo> IS TABLE OF <tipo dos valores> INDEX BY <tipo da > > chave>; > > > > ou vetor: > > > > TYPE <nome do tipo> IS VARRAY <tamanho máximo> OF <tipo do elemento>; > > > > Você pode fazer algo do tipo: > > > > select coluna bulk collect into <nome do tipo tabela> > > from tabela; > > > > Fica muito simples e extremamente eficiente. > > > > Até mais, > > > > Robert > > > > 2008/11/14 Leonardo Rezende <[EMAIL PROTECTED] > > <mailto:yahoo%40lrezende.eti.br> <yahoo%40lrezende.eti.br> > <mailto:yahoo%40lrezende.eti.br <yahoo%2540lrezende.eti.br>> <yahoo% > 40lrezende.eti.br> > > <mailto:yahoo%40lrezende.eti.br <yahoo%2540lrezende.eti.br> <yahoo% > 2540lrezende.eti.br>> > > > > > > Podes tentar com o EXECUTE IMMEDIATE... > > > > > > José Costacurta escreveu: > > > > > > > > Wellerson, bom dia. > > > > > > > > Mas eu consigo criar essa tabela temporária dentro de uma procedure > ou > > > > tenho > > > > que deixá-la criada já? > > > > > > > > Eu tentei criar dentro da procedura mas deu erro. > > > > > > > > Valeu. > > > > > > > > Abraço. > > > > > > > > De: oracle_br@yahoogrupos.com.br > > > > <mailto:oracle_br%40yahoogrupos.com.br> > > > > <oracle_br%40yahoogrupos.com.br> > <mailto:oracle_br%40yahoogrupos.com.br <oracle_br%2540yahoogrupos.com.br>> > <oracle_br%40yahoogrupos.com.br><mailto: > > oracle_br%40yahoogrupos.com.br <oracle_br%2540yahoogrupos.com.br>> > > > > > > > <mailto:oracle_br%40yahoogrupos.com.br <oracle_br%2540yahoogrupos.com.br> > <oracle_br%2540yahoogrupos.com.br> > > <oracle_br%2540yahoogrupos.com.br> > > > > > > > > [mailto:oracle_br@yahoogrupos.com.br > > > > <mailto:oracle_br%40yahoogrupos.com.br> <oracle_br%40yahoogrupos.com.br> > <mailto:oracle_br%40yahoogrupos.com.br <oracle_br%2540yahoogrupos.com.br>> > <oracle_br%40yahoogrupos.com.br> > > <mailto:oracle_br%40yahoogrupos.com.br<oracle_br%2540yahoogrupos.com.br><oracle_br% > 2540yahoogrupos.com.br>> > > > > > > > > <mailto:oracle_br%40yahoogrupos.com.br<oracle_br%2540yahoogrupos.com.br><oracle_br% > 2540yahoogrupos.com.br> > > <oracle_br%2540yahoogrupos.com.br>>] > > > Em > > > > nome de Wellerson Leite de Araújo > > > > Enviada em: sexta-feira, 14 de novembro de 2008 09:22 > > > > Para: oracle_br@yahoogrupos.com.br > > > > <mailto:oracle_br%40yahoogrupos.com.br> > > > > <oracle_br%40yahoogrupos.com.br> > <mailto:oracle_br%40yahoogrupos.com.br <oracle_br%2540yahoogrupos.com.br>> > <oracle_br%40yahoogrupos.com.br> > > <mailto:oracle_br%40yahoogrupos.com.br<oracle_br%2540yahoogrupos.com.br><oracle_br% > 2540yahoogrupos.com.br>> > > <mailto: > > > oracle_br%40yahoogrupos.com.br <oracle_br%2540yahoogrupos.com.br>> > > > > > > Assunto: Res: [oracle_br] Tabela temporária > > > > > > > > José, > > > > > > > > Utilize tabelas temporárias. Através do seguinte comando CREATE > GLOBAL > > > > TEMPORARY TABLE <nome da tabela>. Este recurso permite que os dados > > > > databela > > > > estejam disponíveis enquanto você está conectado, ou enquanto você > não > > > > finaliza a transação. > > > > Ex: CREATE GLOBAL TEMPORARY TABLE temp (id NUMBER, nome VARCHAR2(30)) > > > > Neste caso, após o um commit todas as linhas da tabela TEMP serão > > > > descartadas. Se você quiser manter os dados até você se desconectar > da > > > > instância faça como no exemplo abaixo: > > > > Ex: CREATE GLOBAL TEMPORARY TABLE temp (id NUMBER, nome VARCHAR2(30)) > > ON > > > > COMMIT PRESERVE ROWS; > > > > > > > > Vale ressaltar que as outras sessões não conseguem "enxergar" as > > > > linhas que > > > > estão na tabela TEMP. Não existe concorrência por lock e as > alterações > > > > impostas aos dados desta tabela não geram log. > > > > > > > > Att, > > > > Wellerson > > > > > > > > "Não vou deixar me embrutecer, eu acredito nos meus ideais. Podem até > > > > maltratar o meu coração, que meu espírito ninguém vai conseguir > > > > quebrar..." > > > > (Legião Urbana) > > > > > > > > "As idéias estão no chão, você tropeça e acha a solução..." > > > > (Titãs) > > > > > > > > ________________________________ > > > > De: José Costacurta <[EMAIL PROTECTED] > > > > <mailto:jose_costacurta%40yahoo.com.br> <jose_costacurta%40yahoo.com.br> > <mailto:jose_costacurta%40yahoo.com.br <jose_costacurta%2540yahoo.com.br>> > <jose_costacurta%40yahoo.com.br> > > <mailto:jose_costacurta%40yahoo.com.br<jose_costacurta%2540yahoo.com.br><jose_costacurta% > 2540yahoo.com.br>> > > > > > > > <mailto:jose_costacurta%40yahoo.com.br <jose_costacurta%2540yahoo.com.br> > <jose_costacurta%2540yahoo.com.br> > > <jose_costacurta%2540yahoo.com.br> > > > > > > > > > > <mailto:jose_costacurta%40yahoo.com.br<jose_costacurta%2540yahoo.com.br><jose_costacurta% > 2540yahoo.com.br> > > <jose_costacurta%2540yahoo.com.br>> > > > > > > > > Para: oracle_br@yahoogrupos.com.br > > > > <mailto:oracle_br%40yahoogrupos.com.br> > > > > <oracle_br%40yahoogrupos.com.br> > <mailto:oracle_br%40yahoogrupos.com.br <oracle_br%2540yahoogrupos.com.br>> > <oracle_br%40yahoogrupos.com.br> > > > <mailto:oracle_br%40yahoogrupos.com.br<oracle_br%2540yahoogrupos.com.br><oracle_br% > 2540yahoogrupos.com.br>> > > > > > > > <mailto:oracle_br%40yahoogrupos.com.br <oracle_br%2540yahoogrupos.com.br> > <oracle_br%2540yahoogrupos.com.br> > > <oracle_br%2540yahoogrupos.com.br> > > > > > > > > > > <mailto:oracle_br%40yahoogrupos.com.br<oracle_br%2540yahoogrupos.com.br><oracle_br% > 2540yahoogrupos.com.br> > > <oracle_br%2540yahoogrupos.com.br>> > > > ; > > > > [EMAIL PROTECTED] <mailto:OraOracle%40yahoogrupos.com.br> > > > > <OraOracle%40yahoogrupos.com.br><mailto: > OraOracle%40yahoogrupos.com.br <OraOracle%2540yahoogrupos.com.br>> > <OraOracle%40yahoogrupos.com.br> <mailto: > > OraOracle%40yahoogrupos.com.br <OraOracle%2540yahoogrupos.com.br>> > > <mailto:OraOracle%40yahoogrupos.com.br<OraOracle%2540yahoogrupos.com.br><OraOracle% > 2540yahoogrupos.com.br> > > <OraOracle%2540yahoogrupos.com.br> > > > > > > > > > <mailto:OraOracle%40yahoogrupos.com.br <OraOracle%2540yahoogrupos.com.br> > <OraOracle%2540yahoogrupos.com.br> > > <OraOracle%2540yahoogrupos.com.br> > > > > > > > > > > Enviadas: Sexta-feira, 14 de Novembro de 2008 9:36:06 > > > > Assunto: [oracle_br] Tabela temporária > > > > > > > > Bom dia gente. > > > > > > > > Gostaria de saber se existe algum método de criar "tabelas virtuais" > em > > > > tempo de execução de uma procedure, ou seja, uma tabela que não seja > > > > criada > > > > fisicamente (somente em memória) e ao término da procedure, ela > "suma". > > > > > > > > O problema é que preciso fazer um monte de processamento durante uma > > > > procedure e guardar os resultados para depois poder fazer um select > > nesse > > > > resultado agrupando e somando valores. > > > > > > > > Se alguém souber e puder me ajudar eu agradeço. > > > > > > > > Abraço. > > > > > > > > José Costacurta. > > > > > > > > [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 <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 > > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > [As partes desta mensagem que não continham texto foram removidas] > > > [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas]