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]

Responder a