Re: [oracle_br] Re: Tabela temporária
Beleza Eduardo e Chiappa, muito obrigado pela resposta. E com relação a velocidade que vocês responderam então nem se fala. Muito obrigado mesmo. -- Atenciosamente Francisco Porfirio Ribeiro Neto [As partes desta mensagem que não continham texto foram removidas]
[oracle_br] Re: Tabela temporária
Não, não existe : no bd Oracle as tabelas temporárias (conhecidas como GTTs, Global Temporary Tables) não são criadas automaticamente, vc TEM que fazer um CREATE para elas : a idéia delas é que na implantação do sistema vc já as criou, nesse momento elas estão VAZIAS absolutamente, são só um registro na DBA_TABLES e tabs internas do sistema (o que ABSOLUTAMENTE não tem implicação prática de performance nem de espaço), aí o usuário bota dados nelas á vontade, automaticamente quando a sessão acaba (ou após um COMMIT, se assim vc especificar) os dados vão embora,somem, MAS a estrutura vazia continua lá presente, ok ? Pode consulta a documentação (principalmente o manual de Concepts) que é isso aí Esse é o procedimento mais correto e recomendado para se trabalhar com GTTs, mas se vc quiser vc pode ter algo semelhante ao que vc diz, num trigger de LOGON vc faz o CREATE da GTT, e no trigger de logoff vc faz o DROP : isso NÂO É RECOMENDADO, pois (entre outras questões) tem overhead de performance (DDLs exigem COMMITs implícitos, fazem acesso/uso do dicionário de dados, etc), implicam em PARSEs, E também invalidam outros SQLs que estejam no cache e que usem a GTT em questão. Claro, em muitos casos vc PODE também usar a tabela temporária "implícita", utilizando in-line views , cláusula WITH, etc - isso normalmente implica em "materialização" dos dados, logicamente falando, MAS isso são opções de sintax SQL, são implantadas num só SQL e são usadas atomicamente por esse SQL só, não sei se isso te serve mas é uma outra opção... []s Chiappa == Palestrante ENPO.BR - acesse http://www.enpo-br.org/ Instrutor Workshops ENPO/TWS - acesse http://www.twstecnologia.com.br/ == "O mundo precisa de mais gênios humildes e modestos - infelizmente somos muito poucos" --- Em oracle_br@yahoogrupos.com.br, "francisco porfirio" <[EMAIL PROTECTED]> escreveu > > 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] >
Re: [oracle_br] Re: TABELA TEMPORÁRIA...
Obrigado, eu preciso usar uma tabela temporária mesmo pq eu vou coletar informações de algumas tabelas e vou precisar jogar os resultados em uma única tabela antes de gerar um determinado Relatorio. Nícolas - Original Message - From: Mauro Edson To: oracle_br@yahoogrupos.com.br Sent: Tuesday, November 22, 2005 11:43 AM Subject: [oracle_br] Re: TABELA TEMPORÁRIA... Bom dia Nicolas... as tabelas temporárias podem ser por transação ou por sessão. temporaria por transação: ex.: create global temporary table temp_func (cd_matnumber(5), nm_func varchar2(30), vl_salnumber(11,2)); insert into temp_func select cd_mat, nmfunc||' '||nm_sobrenome, vl_sal from func where cd_mat in (10,30,100,120); commit; (término da transação) select * from temp_func (este select não vai selecionar nenhuma linha) desc temp_func (o comando mostrará a estrutura da tabela temp) no exemplo acima foi criado uma tabela temporaria associada à transação. Isto seguinifica que ao executar a efetivação da transação (commit) todos os dados da tabela temporária são perdidos, porém sua descrição(estrutura) permance. - temporaria por sessão: ex.: create global temporary table temp_func (cd_matnumber(5), nm_func varchar2(30), vl_salnumber(11,2)) on commit preserve rows; insert into temp_func select cd_mat, nmfunc||' '||nm_sobrenome, vl_sal from func where cd_mat in (10,30,100,120); commit; (término da transação) select * from temp_func (este select vai selecionar todas as linhas linha) connect desenv/desenv select * from temp_func (não foi selecionado dados pois houve o fim da sessão quando foi executado o comando de connect acima) A tabela foi criada com a indicação de que após o término da transação os dados sao mantidos e você pode fazer outros comandos, após o termino da sessão os dados serão perdidos. -- 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 Yahoo! Grupos, um serviço oferecido por: PUBLICIDADE -- Links do Yahoo! Grupos a.. Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ b.. Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] c.. O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do Yahoo!. [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 <*> 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
Re: [oracle_br] Re: TABELA TEMPORÁRIA...
Obrigado. - Original Message - From: Marcio Portes To: oracle_br@yahoogrupos.com.br Sent: Tuesday, November 22, 2005 11:27 AM Subject: [oracle_br] Re: TABELA TEMPORÁRIA... Exemplo de criação de tabela temporária http://download- west.oracle.com/docs/cd/B10501_01/server.920/a96540/statements_73a.htm#2 062857 Não sei se é o seu caso, mas muitas vezes queremos usar o mesmo conceito de desenvolvimento do SQL Server ou Sybase que utiliza tabelas temporárias dentro de procedures. No Oracle não é bem assim: simplesmente use um cursor para sua "tabela temporária" - mais ou menos assim: for x in ( select col1, col2, col3 from tab1 ...) loop ... x.col1 := ... ; l_calculo := x.col2 * 100 / ( x.col3 + 1.10 ) ... end loop; E por ai vai. Veja o porque está necessitando de uma tabela temporária. --- Em oracle_br@yahoogrupos.com.br, Nícolas Santana <[EMAIL PROTECTED]> escreveu > 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 Yahoo! Grupos, um serviço oferecido por: PUBLICIDADE -- Links do Yahoo! Grupos a.. Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ b.. Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] c.. O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do Yahoo!. [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 <*> 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
[oracle_br] Re: TABELA TEMPORÁRIA...
Bom dia Nicolas... as tabelas temporárias podem ser por transação ou por sessão. temporaria por transação: ex.: create global temporary table temp_func (cd_mat number(5), nm_funcvarchar2(30), vl_sal number(11,2)); insert into temp_func select cd_mat, nmfunc||' '||nm_sobrenome, vl_sal from func where cd_mat in (10,30,100,120); commit; (término da transação) select * from temp_func (este select não vai selecionar nenhuma linha) desc temp_func (o comando mostrará a estrutura da tabela temp) no exemplo acima foi criado uma tabela temporaria associada à transação. Isto seguinifica que ao executar a efetivação da transação (commit) todos os dados da tabela temporária são perdidos, porém sua descrição(estrutura) permance. - temporaria por sessão: ex.: create global temporary table temp_func (cd_mat number(5), nm_funcvarchar2(30), vl_sal number(11,2)) on commit preserve rows; insert into temp_func select cd_mat, nmfunc||' '||nm_sobrenome, vl_sal from func where cd_mat in (10,30,100,120); commit; (término da transação) select * from temp_func (este select vai selecionar todas as linhas linha) connect desenv/desenv select * from temp_func (não foi selecionado dados pois houve o fim da sessão quando foi executado o comando de connect acima) A tabela foi criada com a indicação de que após o término da transação os dados sao mantidos e você pode fazer outros comandos, após o termino da sessão os dados serão perdidos. -- 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
[oracle_br] Re: TABELA TEMPORÁRIA...
Exemplo de criação de tabela temporária http://download- west.oracle.com/docs/cd/B10501_01/server.920/a96540/statements_73a.htm#2 062857 Não sei se é o seu caso, mas muitas vezes queremos usar o mesmo conceito de desenvolvimento do SQL Server ou Sybase que utiliza tabelas temporárias dentro de procedures. No Oracle não é bem assim: simplesmente use um cursor para sua "tabela temporária" - mais ou menos assim: for x in ( select col1, col2, col3 from tab1 ...) loop ... x.col1 := ... ; l_calculo := x.col2 * 100 / ( x.col3 + 1.10 ) ... end loop; E por ai vai. Veja o porque está necessitando de uma tabela temporária. --- Em oracle_br@yahoogrupos.com.br, Nícolas Santana <[EMAIL PROTECTED]> escreveu > 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 <*> 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