Douglas,

Em tabelas temporárias não é possível nem mesmo com a cláusula ONLINE. Isso 
acontece porque as tabelas temporárias possuem 1 "fragmento" para cada sessão 
que necessita utilizá-las. Desta maneira o Oracle, ainda, não possui uma 
estrutura de dados suficientemente eficiente para replicar a criação de um 
índice por todos estes "fragmentos" (a volatilidade de uma tabela temporária é 
muito grande). Agora, como toda regra tem excessão, vamos à excessão 
(excessão?!?!?!). Caso o único fragmento que esteja sendo utilizado por esta 
tabela for o da sessão que está querendo criar o índice, e a tabela foi criada 
com a opção ON COMMIT DELETE ROWS (este é o default), aí pode. Só que neste 
caso as linhas desta tabela são descartadas (lembre-se que os comandos DDLs 
possuem um COMMIT implícito). Na verdade, todo o "fragmento" que você estava 
utilizando é descartado, ou seja,  não existe nenhum "fragmento" da tabela em 
uso e o índice pode
 ser criado. Por isso, esta particularidade pode nem ser considerada uma 
excessão.

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: Douglas Ortiz <[EMAIL PROTECTED]>
Para: oracle_br@yahoogrupos.com.br; Wellerson Leite de Araújo <[EMAIL 
PROTECTED]>
Enviadas: Sexta-feira, 14 de Novembro de 2008 13:30:21
Assunto: RE: RES: RES: [oracle_br] Tabela temporária


Wellerson, pode criar o ÍNDICE ONLINE.

Douglas Ortiz

Core Competence Center - PostPaid

* [EMAIL PROTECTED] com.br

*: +55 11 8523-6143 

*: +55 11 2113-6391

____________ _________ _________ __

From: [EMAIL PROTECTED] os.com.br [mailto:[EMAIL PROTECTED] os.com.br] On 
Behalf Of Wellerson Leite de Araújo
Sent: sexta-feira, 14 de novembro de 2008 14:30
To: [EMAIL PROTECTED] os.com.br
Subject: Res: RES: RES: [oracle_br] Tabela temporária

Carlos,

É isso mesmo: CREATE INDEX <nome> ON <tabela> (<coluna>); . Só que, como havia 
comentado, a tabela não pode estar sendo utilizada Ou seja, crie o índice logo 
após a criação da tabela. A performance é, praticamente, a mesma do índice 
normal, só que seus dados também são descartados ao final da transação ou da 
sessão.

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: Carlos martello <carlos.martello@ choice.com. br <mailto:carlos. martello% 
40choice. com.br> >
Para: [EMAIL PROTECTED] os.com.br <mailto:oracle_ br%40yahoogrupos .com.br> 
Enviadas: Sexta-feira, 14 de Novembro de 2008 11:51:17
Assunto: RES: RES: [oracle_br] Tabela temporária

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: carlosmartello@ choice.com. br

De: [EMAIL PROTECTED] os.com.br [mailto:oracle_ [EMAIL PROTECTED] os.com.br] Em 
nome de Robert Anderson
Enviada em: sexta-feira, 14 de novembro de 2008 10:36
Para: [EMAIL PROTECTED] os.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 <jose_costacurta@ yahoo.com. br <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: [EMAIL PROTECTED] os.com.br <mailto:oracle_ br%40yahoogrupos .com.br> 
> <oracle_br%40yahoog rupos.com. br> [mailto:
> [EMAIL PROTECTED] os.com.br <mailto:oracle_ br%40yahoogrupos .com.br> 
> <oracle_br%40yahoog rupos.com. br>] Em
> nome de Robert Anderson
> Enviada em: sexta-feira, 14 de novembro de 2008 10:21
> Para: [EMAIL PROTECTED] os.com.br <mailto:oracle_ br%40yahoogrupos .com.br> 
> <oracle_br%40yahoog rupos.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 <jose_costacurta@ yahoo.com. br <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: [EMAIL PROTECTED] os.com.br <mailto:oracle_ br%40yahoogrupos .com.br> 
> > <oracle_br%40yahoog rupos.com. br><mailto:
> oracle_br%40yahoogr upos.com. br <oracle_br%2540yaho ogrupos.com. br>>
> <oracle_br%40yahoog rupos.com. br> [mailto:
> > [EMAIL PROTECTED] os.com.br <mailto:oracle_ br%40yahoogrupos .com.br> 
> > <oracle_br%40yahoog rupos.com. br> <mailto:
> oracle_br%40yahoogr upos.com. br <oracle_br%2540yaho ogrupos.com. br>>
> <oracle_br%40yahoog rupos.com. br>] Em
> > nome de Robert Anderson
> > Enviada em: sexta-feira, 14 de novembro de 2008 10:02
> >
> > Para: [EMAIL PROTECTED] os.com.br <mailto:oracle_ br%40yahoogrupos .com.br> 
> > <oracle_br%40yahoog rupos.com. br><mailto:
> oracle_br%40yahoogr upos.com. br <oracle_br%2540yaho ogrupos.com. br>>
> <oracle_br%40yahoog rupos.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] eti.br <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: [EMAIL PROTECTED] os.com.br <mailto:oracle_ br%40yahoogrupos 
> > > > .com.br> <oracle_br%40yahoog rupos.com. br>
> <mailto:oracle_ br%40yahoogrupos .com.br <oracle_br%2540yaho ogrupos.com. br>>
> <oracle_br%40yahoog rupos.com. br><mailto:
> > oracle_br%40yahoogr upos.com. br <oracle_br%2540yaho ogrupos.com. br>>
> >
> > > >
> <mailto:oracle_ br%40yahoogrupos .com.br <oracle_br%2540yaho ogrupos.com. br>
> <oracle_br%2540yaho ogrupos.com. br>
> > <oracle_br%2540yaho ogrupos.com. br>
> > > >
> > > > [mailto:oracle_ [EMAIL PROTECTED] os.com.br <mailto:oracle_ 
> > > > br%40yahoogrupos .com.br> <oracle_br%40yahoog rupos.com. br>
> <mailto:oracle_ br%40yahoogrupos .com.br <oracle_br%2540yaho ogrupos.com. br>>
> <oracle_br%40yahoog rupos.com. br>
> > <mailto:oracle_ br%40yahoogrupos .com.br<oracle_ br%2540yahoogrup 
> > os.com.br> <oracle_br%
> 2540yahoogrupos. com.br>>
> >
> > > >
> > <mailto:oracle_ br%40yahoogrupos .com.br<oracle_ br%2540yahoogrup 
> > os.com.br> <oracle_br%
> 2540yahoogrupos. com.br>
> > <oracle_br%2540yaho ogrupos.com. br>>]
> > > Em
> > > > nome de Wellerson Leite de Araújo
> > > > Enviada em: sexta-feira, 14 de novembro de 2008 09:22
> > > > Para: [EMAIL PROTECTED] os.com.br <mailto:oracle_ br%40yahoogrupos 
> > > > .com.br> <oracle_br%40yahoog rupos.com. br>
> <mailto:oracle_ br%40yahoogrupos .com.br <oracle_br%2540yaho ogrupos.com. br>>
> <oracle_br%40yahoog rupos.com. br>
> > <mailto:oracle_ br%40yahoogrupos .com.br<oracle_ br%2540yahoogrup 
> > os.com.br> <oracle_br%
> 2540yahoogrupos. com.br>>
> > <mailto:
> > > oracle_br%40yahoogr upos.com. br <oracle_br%2540yaho ogrupos.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 <jose_costacurta@ yahoo.com. br <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_costacur ta%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_costacur ta%2540yahoo. 
> > com.br><jose_ costacurta%
> 2540yahoo.com. br>
> > <jose_costacurta% 2540yahoo. com.br>>
> > > >
> > > > Para: [EMAIL PROTECTED] os.com.br <mailto:oracle_ br%40yahoogrupos 
> > > > .com.br> <oracle_br%40yahoog rupos.com. br>
> <mailto:oracle_ br%40yahoogrupos .com.br <oracle_br%2540yaho ogrupos.com. br>>
> <oracle_br%40yahoog rupos.com. br>
>
> > <mailto:oracle_ br%40yahoogrupos .com.br<oracle_ br%2540yahoogrup 
> > os.com.br> <oracle_br%
> 2540yahoogrupos. com.br>>
> >
> > > >
> <mailto:oracle_ br%40yahoogrupos .com.br <oracle_br%2540yaho ogrupos.com. br>
> <oracle_br%2540yaho ogrupos.com. br>
> > <oracle_br%2540yaho ogrupos.com. br>
> > > >
> > > >
> > <mailto:oracle_ br%40yahoogrupos .com.br<oracle_ br%2540yahoogrup 
> > os.com.br> <oracle_br%
> 2540yahoogrupos. com.br>
> > <oracle_br%2540yaho ogrupos.com. br>>
> > > ;
> > > > [EMAIL PROTECTED] os.com.br <mailto:OraOracle% 40yahoogrupos. com.br> 
> > > > <OraOracle%40yahoog rupos.com. br><mailto:
> OraOracle%40yahoogr upos.com. br <OraOracle%2540yaho ogrupos.com. br>>
> <OraOracle%40yahoog rupos.com. br> <mailto:
> > OraOracle%40yahoogr upos.com. br <OraOracle%2540yaho ogrupos.com. br>>
> > <mailto:OraOracle% 40yahoogrupos. com.br<OraOracle %2540yahoogrupos 
> > .com.br>< OraOracle%
> 2540yahoogrupos. com.br>
> > <OraOracle%2540yaho ogrupos.com. br>
> > > >
> > > >
> <mailto:OraOracle% 40yahoogrupos. com.br <OraOracle%2540yaho ogrupos.com. br>
> <OraOracle%2540yaho ogrupos.com. br>
> > <OraOracle%2540yaho ogrupos.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.maisbusca dos.yahoo. com <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]
> > > >
> > > >
> > >
> > >
> > > ------------ --------- --------- ------
> > >
> > >
> > > ------------ --------- --------- --------- --------- --------- -
> > > >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]

Veja quais são os assuntos do momento no Yahoo! +Buscados
http://br.maisbusca dos.yahoo. com <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]

Responder a