IBM DB2 - Conceitos de design de tabela - Colunas ocultas



Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

IBM DB2 - Conceitos de design de tabela - Colunas ocultas

Quando uma coluna de tabela é definida com o atributo oculto implicitamente, essa coluna fica indisponível, a menos que seja explicitamente referenciada.
Por exemplo, se uma consulta SELECT * for executada em uma tabela, as colunas ocultas implicitamente não serão retornadas na tabela de resultados.
Uma coluna oculta implicitamente sempre pode ser referenciada explicitamente sempre que um nome de coluna puder ser especificado.

Nos casos em que as colunas e suas entradas são geradas pelo gerenciador de banco de dados, definir essas colunas como IMPLICITLY HIDDEN pode minimizar qualquer impacto negativo potencial em seus aplicativos.
Por exemplo, uma tabela temporal de período do sistema possui três colunas cujos valores são gerados pelo gerenciador de banco de dados.
O gerenciador de banco de dados usa essas colunas para preservar versões históricas de cada linha da tabela.
A maioria dos aplicativos de negócios funcionaria com os dados históricos, mas raramente funcionaria com essas três colunas geradas.
Ocultar essas colunas de seus aplicativos pode reduzir o tempo de processamento do aplicativo.

Ao inserir dados em uma tabela, uma instrução INSERT sem uma lista de colunas não espera valores para nenhuma coluna implicitamente oculta.
Nesses casos, se a entrada incluir um valor para uma coluna oculta implicitamente, esse valor não terá uma coluna de destino correspondente e um erro será retornado (SQLSTATE 42802).
Como uma instrução INSERT sem uma lista de colunas não inclui valores para colunas ocultas implicitamente, todas as colunas definidas como ocultas implicitamente e NOT NULL devem ter um valor padrão definido

Ao preencher uma tabela com dados de um arquivo de entrada, utilitários como IMPORT, INGEST e LOAD exigem que você especifique se os dados das colunas ocultas serão incluídos na operação.
Se uma lista de colunas não for especificada, os utilitários de movimentação de dados deverão usar os modificadores de tipo de arquivo implicitlyhiddeninclude ou implicitlyhiddenmissing ao trabalhar com tabelas que contêm colunas ocultas implicitamente.
Você também pode usar a variável de registro DB2_DMU_DEFAULT para definir o comportamento padrão quando os utilitários de movimentação de dados encontrarem tabelas com colunas ocultas implicitamente.
Da mesma forma, EXPORT requer que você especifique se os dados das colunas ocultas estão incluídos na operação.

O atributo implicitamente oculto pode ser definido em uma coluna de tabela usando a instrução CREATE TABLE para novas tabelas ou a instrução ALTER TABLE para tabelas existentes.
Se uma tabela for criada usando uma instrução CREATE TABLE com a cláusula LIKE, quaisquer colunas ocultas implicitamente na tabela de origem serão herdadas pela nova tabela.
A instrução ALTER TABLE pode ser usada para alterar colunas ocultas para não ocultas ou para alterar colunas não ocultas para ocultas.
Alterar uma tabela para alterar o atributo oculto de algumas colunas pode afetar o comportamento dos utilitários de movimentação de dados que estão trabalhando com a tabela.
Por exemplo, isso pode significar que uma operação de carregamento executada com êxito antes da alteração da tabela para definir algumas colunas ocultas
agora retorna um erro (SQLCODE -2437).

A lista de nomes que identificam as colunas de uma tabela de resultados de uma consulta SELECT executada com a opção nome-exposto.* não inclui nenhuma coluna oculta implicitamente.
Uma consulta SELECT executada com o order-by-clausepode incluir colunas ocultas implicitamente no simple-column-name.

Se uma coluna implicitamente oculta for explicitamente referenciada em uma definição de tabela de consulta materializada, essa coluna fará parte da tabela de consulta materializada.
No entanto, a coluna na tabela de consulta materializada não herda o atributo oculto implicitamente.
Esse mesmo comportamento se aplica a exibições e tabelas criadas com a cláusula as-result-table.

Uma coluna oculta implicitamente pode ser explicitamente referenciada em uma instrução CREATE INDEX, instrução ALTER TABLE ou em uma restrição referencial.

Existe uma variável de transição para qualquer coluna definida como oculta implicitamente.
No corpo de um gatilho, uma variável de transição que corresponde a uma coluna oculta implicitamente pode ser referenciada.

Colunas implicitamente ocultas não são suportadas em tabelas temporárias criadas e tabelas temporárias declaradas.

As colunas ocultas de uma tabela podem ser exibidas usando o comando DESCRIBE.


    DESCRIBE TABLE tablename SHOW DETAIL

Exemplos

Exemplo 1:
Na instrução a seguir, uma tabela é criada com uma coluna oculta implicitamente.

    CREATE TABLE CUSTOMER
    (
     CUSTOMERNO       INTEGER NOT NULL,
     CUSTOMERNAME     VARCHAR(80),
     PHONENO          CHAR(8) IMPLICITLY HIDDEN
    );

A SELECT *retorna apenas as entradas de coluna para CUSTOMERNOe CUSTOMERNAME. Por exemplo:

    A123, ACME
    B567, First Choice
    C345, National Chain

As entradas para a PHONENOcoluna ficam ocultas, a menos que sejam explicitamente referenciadas.

    SELECT CUSTOMERNO
    ,      CUSTOMERNAME
    ,      PHONENO
     FROM  CUSTOMER

Exemplo 2:
Se a tabela do banco de dados contiver colunas ocultas implicitamente, você deverá especificar se os dados das colunas ocultas serão incluídos nas operações de movimentação de dados.
O exemplo a seguir usa LOAD para mostrar os diferentes métodos para indicar se os dados das colunas ocultas estão incluídos:

  • Use insert-column para especificar explicitamente as colunas nas quais os dados devem ser inseridos.

             DB2 LOAD FROM DELFILE1 OF DEL
                 INSERT INTO TABLE1 (C1, C2, C3,...)

  • Use um dos modificadores de tipo de arquivo de coluna oculta:
    especifique implicitamentehiddeninclude quando o arquivo de entrada contém dados para as colunas ocultas ou implicitamente oculto quando o arquivo de entrada não contém.

             DB2 LOAD FROM DELFILE1 OF DEL MODIFIED BY IMPLICITLYHIDDENINCLUDE
                 INSERT INTO TABLE1

  • Use a variável de registro DB2_DMU_DEFAULT no lado do servidor para definir o comportamento quando os utilitários de movimentação de dados encontrarem tabelas com colunas ocultas implicitamente.

             DB2SET DB2_DMU_DEFAULT=IMPLICITLYHIDDENINCLUDE
             DB2 LOAD FROM DELFILE1 OF DEL INSERT INTO TABLE1

© Copyright IBM Corp.