10.4. Armazenamento de valor

Os valores a serem inseridos na tabela são convertidos no tipo de dado da coluna de destino de acordo com as seguintes etapas.

Conversão de tipo para armazenamento de valor

  1. Verificar a correspondência exata com o destino.
  2. Senão, tentar converter a expressão no tipo de dado de destino. Isto será bem-sucedido se houver uma conversão registrada entre os dois tipos. Se a expressão for um literal de tipo desconhecido, o conteúdo do literal cadeia de caracteres será enviado para a rotina de conversão de entrada do tipo de destino.
  3. Se o destino for um tipo de comprimento fixo (por exemplo, char ou varchar com comprimento declarado), então tentar encontrar uma função de tamanho para o tipo de dado de destino. Uma função de tamanho é uma função com o mesmo nome do tipo de dado aceitando dois argumentos, sendo o primeiro do próprio tipo e o segundo do tipo integer, retornando o próprio tipo. Se alguma função for encontrada, esta é aplicada passando o comprimento declarado da coluna como o segundo parâmetro.

Exemplo 10-6. Conversão de tipo no armazenamento de character

Para uma coluna de destino declarada como character(20), a seguinte declaração garante que o valor armazenado terá o tamanho correto:

=> CREATE TABLE vv (v character(20));
=> INSERT INTO vv SELECT 'abc' || 'def';
=> SELECT v, length(v) FROM vv;

          v           | length
----------------------+--------
 abcdef               |     20
(1 linha)

O que acontece realmente aqui, é que os dois literais desconhecidos são resolvidos como text por padrão, permitindo que o operador || seja resolvido como concatenação de text. Depois, o resultado text do operador é convertido em bpchar ("caractere completado com brancos", ou "blank-padded char", que é o nome interno do tipo de dado character) para corresponder com o tipo da coluna de destino (Uma vez que os tipos text e bpchar são binariamente compatíveis, esta conversão não insere nenhuma chamada real de função). Por fim, a função de tamanho bpchar(bpchar, integer) é encontrada no catálogo do sistema, e aplicada ao resultado do operador e comprimento da coluna armazenada. Esta função específica do tipo realiza a verificação do comprimento requerido, e adiciona espaços para completar.

SourceForge.net Logo