Res: [oracle_br] Tabela temporária
Francisco, No Oracle a tabela temporária é um pouco diferente. A tabela é criada uma única vez como temporária, após isso, o que é descartado no logoff são os dados. Desta maneira dentro do seu programa você só precisa referenciar a tabela, inserindo dados, alterando, selecionando e removendo. Quando o usuário se desconectar estes são descartados. E cada conexão enxerga somente os dados inseridos e alterados por ela. Pode-se criar índices nestas tabelas também. Acredito que esta seja uma solução melhor que a criação da tabela no login e remoção no logoff, até porque para cada conexão o nome gerado deve ser diferente (se a tabela for ser criada no mesmo esquema). Utilize a seguinte sintaxe para criar esta tabela: CREATE GLOBAL TEMPORARY TABLE nome (definicao das colunas) ON COMMIT PRESERVE ROWS; 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: Eduardo [EMAIL PROTECTED] Para: oracle_br@yahoogrupos.com.br Enviadas: Quinta-feira, 20 de Novembro de 2008 10:03:36 Assunto: Re: [oracle_br] Tabela temporária Faça uma trigger de logon. E outra de logoff. 2008/11/20 francisco porfirio francisco.porfirio@ gmail.com Pessoal... Gostaria de saber se no oracle existe o conceito de tabelas temporárias por session, ou seja: assim que um usuário se autenticar automaticamente essa tabela é criada e quando a sessão é encerrada automaticamente a tabela é eliminada. -- Atenciosamente Francisco Porfirio Ribeiro Neto [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: [oracle_br] Tabela temporária
Jose, Bom dia. Voce ja tentou utilizar uma tablespace temporaria? Att, Emerson M. Rocha Mobile:(11) 9511-8753 E-Mail: [EMAIL PROTECTED] De: José Costacurta [EMAIL PROTECTED] Para: oracle_br@yahoogrupos.com.br; [EMAIL PROTECTED] Enviadas: Sexta-feira, 14 de Novembro de 2008 10: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 [As partes desta mensagem que não continham texto foram removidas]
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] Para: oracle_br@yahoogrupos.com.br; [EMAIL PROTECTED] 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 [As partes desta mensagem que não continham texto foram removidas]
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: 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:22 Para: oracle_br@yahoogrupos.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 Para: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br ; [EMAIL PROTECTED] 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.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]
Re: RES: [oracle_br] Tabela temporária
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@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.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 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.br Para: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br ; [EMAIL PROTECTED] mailto:OraOracle%40yahoogrupos.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.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 * 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
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] 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
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]
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] 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.broracle_br%2540yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.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 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.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.broracle_br%2540yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.broracle_br%2540yahoogrupos.com.br ; [EMAIL PROTECTED] 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/ Links do Yahoo! Grupos [As partes desta mensagem que não continham texto foram removidas]
RES: RES: [oracle_br] Tabela temporária
Ó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
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] Ó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 oracle_br%40yahoogrupos.com.br [mailto: oracle_br@yahoogrupos.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 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]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 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 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 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]jose_costacurta%40yahoo.com.br mailto:jose_costacurta%40yahoo.com.br jose_costacurta%2540yahoo.com.br mailto:jose_costacurta%40yahoo.com.brjose_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 Para: oracle_br@yahoogrupos.com.br oracle_br%40yahoogrupos.com.br mailto: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%40yahoogrupos.com.br oracle_br%2540yahoogrupos.com.br oracle_br%2540yahoogrupos.com.br ; [EMAIL PROTECTED] 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 mailto:OraOracle%40yahoogrupos.com.brOraOracle%2540yahoogrupos.com.br OraOracle%2540yahoogrupos.com.br Enviadas: Sexta-feira, 14 de Novembro de 2008 9:36:06
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] 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
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
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] mailto:jose_costacurta
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] 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 oracle_br%40yahoogrupos.com.br [mailto: oracle_br@yahoogrupos.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 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]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 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 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 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]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 oracle_br%40yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br oracle_br%2540yahoogrupos.com.br oracle_br%40yahoogrupos.com.brmailto: 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.broracle_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.broracle_br%2540yahoogrupos.com.broracle_br% 2540yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.broracle_br%2540yahoogrupos.com.broracle_br% 2540yahoogrupos.com.br oracle_br%2540yahoogrupos.com.br] Em nome de Wellerson Leite de Araújo Enviada em: sexta-feira
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: [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
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
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
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
RES: [oracle_br] TABELA TEMPORÁRIA...
Opa! Um exemplo: create global temporary table temp ( idnumber, valor varchar2(50) ) on commit delete rows; como alternativa, podes alterar para on commit preserve rows os dados inseridos em uma sessão estarão disponíveis até o final dela. Outras sessões não conseguirão ver estes dados. A tabela é temporária, mas é mantida no banco, na verdade o que é temporário são os dados. Abraço Ivan -Mensagem original- De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de Nícolas Santana Enviada em: terça-feira, 22 de novembro de 2005 10:23 Para: oracle_br@yahoogrupos.com.br Assunto: [oracle_br] TABELA TEMPORÁRIA... Bom dia a Todos ALGUÉM SABE COMO FAÇO PARA CRIAR UMA TABELA TEMPORÁRIA NO ORACLE 9i? Nícolas [As partes desta mensagem que não continham texto foram removidas] -- 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