Res: RES: [oracle_br] Tabela temporária

2008-11-14 Por tôpico Wellerson Leite de Araújo
José,

Para criá-la dentro de uma procedure você deve utilizar o comando EXECUTE 
IMMEDIATE.
Mas não acho que você deva criar esta tabela numa procedure (não é uma boa 
prática de programação). Você pode criá-la (uma vez) e todas as vezes que você 
precisar armazenar dados temporários nela, bastaria referenciá-la nos seus DMLs.

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]
Para: oracle_br@yahoogrupos.com.br
Enviadas: Sexta-feira, 14 de Novembro de 2008 10:31:34
Assunto: RES: [oracle_br] Tabela temporária


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:[EMAIL PROTECTED] os.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
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 
Para: [EMAIL PROTECTED] os.com.br mailto:oracle_ br%40yahoogrupos .com.br ;
[EMAIL PROTECTED] os.com.br mailto:OraOracle% 40yahoogrupos. 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

[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]



RES: RES: [oracle_br] Tabela temporária

2008-11-14 Por tôpico José Costacurta
Legal, entendi.

 

Qual a diferença então entre criar uma tabela desse tipo e criar uma tabela
“de verdade”?

 

Eu pensei que tabela temporária “sumisse” quando o processo acabasse ou a
sessão 

 

Essa tabela vai ter muitos registros, não seria melhor eu criar uma tabela
de verdade para poder indexá-la?

 

Valeu.

 

Abraço.

 

De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de Wellerson Leite de Araújo
Enviada em: sexta-feira, 14 de novembro de 2008 09:53
Para: oracle_br@yahoogrupos.com.br
Assunto: Res: RES: [oracle_br] Tabela temporária

 

José,

Para criá-la dentro de uma procedure você deve utilizar o comando EXECUTE
IMMEDIATE.
Mas não acho que você deva criar esta tabela numa procedure (não é uma boa
prática de programação). Você pode criá-la (uma vez) e todas as vezes que
você precisar armazenar dados temporários nela, bastaria referenciá-la nos
seus DMLs.

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 
Para: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br 
Enviadas: Sexta-feira, 14 de Novembro de 2008 10:31:34
Assunto: RES: [oracle_br] Tabela temporária

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:[EMAIL PROTECTED] os.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
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 
Para: [EMAIL PROTECTED] os.com.br mailto:oracle_ br%40yahoogrupos
.com.br ;
[EMAIL PROTECTED] os.com.br mailto:OraOracle% 40yahoogrupos. 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

[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]

 



[As partes desta mensagem que não continham texto foram removidas]



RES: RES: [oracle_br] Tabela temporária

2008-11-14 Por tôpico José Costacurta
Ó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:[EMAIL PROTECTED] Em
nome de Robert Anderson
Enviada em: sexta-feira, 14 de novembro de 2008 10:02
Para: oracle_br@yahoogrupos.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 

 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

  mailto:oracle_br%40yahoogrupos.com.broracle_br%2540yahoogrupos.com.br
 
  [mailto:oracle_br@yahoogrupos.com.br
mailto:oracle_br%40yahoogrupos.com.br 
 
mailto:oracle_br%40yahoogrupos.com.broracle_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  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 
  mailto:jose_costacurta%40yahoo.com.brjose_costacurta%2540yahoo.com.br
 
 
mailto:jose_costacurta%40yahoo.com.brjose_costacurta%2540yahoo.com.br
 
  Para: oracle_br@yahoogrupos.com.br
mailto:oracle_br%40yahoogrupos.com.br 
  mailto:oracle_br%40yahoogrupos.com.broracle_br%2540yahoogrupos.com.br
 
 
mailto:oracle_br%40yahoogrupos.com.broracle_br%2540yahoogrupos.com.br
 ;
  [EMAIL PROTECTED] mailto:OraOracle%40yahoogrupos.com.br
mailto:OraOracle%40yahoogrupos.com.brOraOracle%2540yahoogrupos.com.br
 
  mailto:OraOracle%40yahoogrupos.com.brOraOracle%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/
 

Res: RES: RES: [oracle_br] Tabela temporária

2008-11-14 Por tôpico Wellerson Leite de Araújo
José,

A diferença é que uma tabela normal deve ser associada a um segmento do tipo 
tabela em alguma tablespace permamente. Uma tabela temporária salva seus 
dados na tablespace temporária, com isso você não possui problemas relacionados 
a locks, geração de log, geração de dados de undo, etc.
E o mais bonito da coisa é que você pode criar índices numa tabela temporária 
(bacana demais). A tabela não pode estar sendo usada se for necessário criar 
índices (crie os índices logo após a criação da tabela).

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]
Para: oracle_br@yahoogrupos.com.br
Enviadas: Sexta-feira, 14 de Novembro de 2008 10:57:22
Assunto: RES: RES: [oracle_br] Tabela temporária


Legal, entendi.

Qual a diferença então entre criar uma tabela desse tipo e criar uma tabela
“de verdade”?

Eu pensei que tabela temporária “sumisse” quando o processo acabasse ou a
sessão 

Essa tabela vai ter muitos registros, não seria melhor eu criar uma tabela
de verdade para poder indexá-la?

Valeu.

Abraço.

De: [EMAIL PROTECTED] os.com.br [mailto:[EMAIL PROTECTED] os.com.br] Em
nome de Wellerson Leite de Araújo
Enviada em: sexta-feira, 14 de novembro de 2008 09:53
Para: [EMAIL PROTECTED] os.com.br
Assunto: Res: RES: [oracle_br] Tabela temporária

José,

Para criá-la dentro de uma procedure você deve utilizar o comando EXECUTE
IMMEDIATE.
Mas não acho que você deva criar esta tabela numa procedure (não é uma boa
prática de programação). Você pode criá-la (uma vez) e todas as vezes que
você precisar armazenar dados temporários nela, bastaria referenciá-la nos
seus DMLs.

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 
Para: [EMAIL PROTECTED] os.com.br mailto:oracle_ br%40yahoogrupos .com.br 
Enviadas: Sexta-feira, 14 de Novembro de 2008 10:31:34
Assunto: RES: [oracle_br] Tabela temporária

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_ [EMAIL PROTECTED] os.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
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 
Para: [EMAIL PROTECTED] os.com.br mailto:oracle_ br%40yahoogrupos
.com.br ;
[EMAIL PROTECTED] os.com.br mailto:OraOracle% 40yahoogrupos. 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

[As partes desta mensagem que não continham texto foram removidas]

[As partes desta mensagem

RES: RES: RES: [oracle_br] Tabela temporária

2008-11-14 Por tôpico José Costacurta
Show de bola.

 

Vou fazer isso então.

 

Valeu pela “aula”!

 

Abraço.

 

José Costacurta.

 

De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de Wellerson Leite de Araújo
Enviada em: sexta-feira, 14 de novembro de 2008 10:21
Para: oracle_br@yahoogrupos.com.br
Assunto: Res: RES: RES: [oracle_br] Tabela temporária

 

José,

A diferença é que uma tabela normal deve ser associada a um segmento do tipo
tabela em alguma tablespace permamente. Uma tabela temporária salva seus
dados na tablespace temporária, com isso você não possui problemas
relacionados a locks, geração de log, geração de dados de undo, etc.
E o mais bonito da coisa é que você pode criar índices numa tabela
temporária (bacana demais). A tabela não pode estar sendo usada se for
necessário criar índices (crie os índices logo após a criação da tabela).

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 
Para: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br 
Enviadas: Sexta-feira, 14 de Novembro de 2008 10:57:22
Assunto: RES: RES: [oracle_br] Tabela temporária

Legal, entendi.

Qual a diferença então entre criar uma tabela desse tipo e criar uma tabela
“de verdade”?

Eu pensei que tabela temporária “sumisse” quando o processo acabasse ou a
sessão 

Essa tabela vai ter muitos registros, não seria melhor eu criar uma tabela
de verdade para poder indexá-la?

Valeu.

Abraço.

De: [EMAIL PROTECTED] os.com.br [mailto:[EMAIL PROTECTED] os.com.br] Em
nome de Wellerson Leite de Araújo
Enviada em: sexta-feira, 14 de novembro de 2008 09:53
Para: [EMAIL PROTECTED] os.com.br
Assunto: Res: RES: [oracle_br] Tabela temporária

José,

Para criá-la dentro de uma procedure você deve utilizar o comando EXECUTE
IMMEDIATE.
Mas não acho que você deva criar esta tabela numa procedure (não é uma boa
prática de programação). Você pode criá-la (uma vez) e todas as vezes que
você precisar armazenar dados temporários nela, bastaria referenciá-la nos
seus DMLs.

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 
Para: [EMAIL PROTECTED] os.com.br mailto:oracle_ br%40yahoogrupos
.com.br 
Enviadas: Sexta-feira, 14 de Novembro de 2008 10:31:34
Assunto: RES: [oracle_br] Tabela temporária

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_ [EMAIL PROTECTED] os.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
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 
Para: [EMAIL PROTECTED] os.com.br mailto:oracle_ br%40yahoogrupos
.com.br ;
[EMAIL PROTECTED] os.com.br mailto:OraOracle% 40yahoogrupos. 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

RES: RES: [oracle_br] Tabela temporária

2008-11-14 Por tôpico José Costacurta
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:[EMAIL PROTECTED] Em
nome de Robert Anderson
Enviada em: sexta-feira, 14 de novembro de 2008 10:21
Para: oracle_br@yahoogrupos.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 

 Ó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@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:02

 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

 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 

  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.brmailto:
 oracle_br%40yahoogrupos.com.br oracle_br%2540yahoogrupos.com.br

  
mailto:oracle_br%40yahoogrupos.com.broracle_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

  
 mailto:oracle_br%40yahoogrupos.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
 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]

RES: RES: [oracle_br] Tabela temporária

2008-11-14 Por tôpico Carlos martello
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.brmailto:
 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.brmailto:
 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.
   

Res: RES: RES: [oracle_br] Tabela temporária

2008-11-14 Por tôpico Wellerson Leite de Araújo
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 [EMAIL PROTECTED]
Para: oracle_br@yahoogrupos.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:[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. brmailto:
 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. brmailto:
 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

RE: RES: RES: [oracle_br] Tabela temporária

2008-11-14 Por tôpico Douglas Ortiz
Wellerson, pode criar o ÍNDICE ONLINE.

 

 

 

Douglas Ortiz

 

Core Competence Center - PostPaid

*  [EMAIL PROTECTED]

*: +55 11 8523-6143 

*: +55 11 2113-6391



From: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] On Behalf Of 
Wellerson Leite de Araújo
Sent: sexta-feira, 14 de novembro de 2008 14:30
To: oracle_br@yahoogrupos.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 [EMAIL PROTECTED] mailto:carlos.martello%40choice.com.br 

Para: oracle_br@yahoogrupos.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:[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. brmailto:
 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

Res: RES: RES: [oracle_br] Tabela temporária

2008-11-14 Por tôpico Wellerson Leite de Araújo
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