quarta-feira, 13 de janeiro de 2010

Armazenamento de Tabelas Temporarias no Informix

O esquema de distribuição que voce especificar com a instrução CREATE TEMPORARY TABLE, sera gravada baseando-se na configuração do parametro do ONCONFIG, esse parametro é o DBSPACETEMP.

Se você não especificar explicitamente um esquema de distribuição para uma tabela temporaria, o seu local de armazenamento sera o DBSPACETEMP.
  • Se o DBSPACETEMP não forem definidos no ONCONFIG, todas as tabelas temporarias serão criadas sem fragmentos no dbspace de onde o banco de dados foi criado ( ou no dbroots, se o banco de dados não foi criado em outro dbspace).
  • Se apenas um dbspace temporario é especificado no parametro DBSPACETEMP, então todas as tabelas temporarias serão criadas sem a fragmentação no dbspace especificado.
  • Se o parametro DBSPACETEMP tiver mais de um dbspace especificado, então cada tabela temporaria é criada em um dos dbspaces especificado.
Em um Banco de Dados especificado como non-logging, cada tabela temporaria é criada em um dbspace temporario, em uma operação de banco de dados que suporte o registro, a tabela temporaria é criada em um dbspace padrão. O Servidor de Banco de Dados se mantem informado quais as dbspaces foram usados recentemente, e quando ele recebe a solicitação para armazenamento temporario, o servidor usa o dbspace proximo disponivel a fim de alocar I/O de operações uniformemente entre os dbspaces.

Por exemplo, se voce criar tres tabelas temporarias em um banco de dados com o parametro DBSPACETEMP setado com tres dbspaces (temp1, temp2 e temp3), o servidor ira gravar a primeira tabela no dbspace temp1, a segunda tabela no dbspace2 e a terceira tabela no dbspace3.

As tabelas temporarias criadas com SELECT....INTO TEMP ou SELECT.... INTO SCRATCH, também se comportam desta maneira.

Para maiores informações sobre o parametro DBSPACETEMP, consulte o IBM Informix Guide to SQL.

O exemplo a seguir mostra como inserir dados em uma tabela temporaria chamada result_temp, originada de um função definida pelo usuario (informix) que retorna varias linhas:

CREATE TEMP TABLE result_temp (.........);
INSERT INTO result_temp informix function execute ( );

UNLOAD TO 'arquivo' SELECT * FROM temp1;

Fiquem na Paz.

2 comentários:

  1. Ola Amilcar,

    Primeiramente obrigado por me responder.

    Na verdade eu gostaria de encontrar a tabela onde o IDS armazena o nome das tabelas temporárias, assim como ele faz na systables.

    Mesmo assim, muito obrigado por compartilhar mais esse conhecimento conosco.

    Grande abraço!

    ResponderExcluir
  2. select
    *
    from
    sysmaster:systabnames s
    , sysmaster:systabinfo i
    where
    s.partnum = i.ti_partnum
    and s.tabname = 'temp_teste'

    ResponderExcluir