Acesso direto ao conteúdo
Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Aprenda inglês de uma vez por todas

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

Como converter a coluna de uma tabela por outro tipo no PostgreSQL 8.3 ?

Colaboração: Rodrigo Rosa Fragoso

Data de Publicação: 23 de novembro de 2010

Pegunta simples certo? Bem, mas se os tipos de dados forem diferentes e a coluna estiver com os dados. Por exemplo, a tabela fx_Salario tem uma coluna denominada fx_codigoSalario do tipo varchar(10) e gostaria de modificar para inteiro?.

Esta pergunta poderia ser respondida da seguinte forma "Simples, abre o PgAdmin, vai em propriedades da tabela e faz a modificação...pronto !!! ou se preferir digite a seguinte instrução".

  ALTER TABLE fx_Salario ALTER COLUMN fx_codigoSalario TYPE integer.

Perfeito !!! Não !?!

O seguinte erro é gerado :

  column "fx_codigoSalario" cannot be cast to type "pg_catalog.int4"

A instrução não funcionou, pois a informações que não foram possíveis de conversão, neste caso, os caracteres (letras).

Para resolver isso e manter a integridade dos dados pode-se criar uma função que receba o dado que esta sendo convertido. Este dado será convertido em número se existir ou retorne NULL caso não seja possível à conversão.

Desta forma:

  CREATE OR REPLACE FUNCTION fx_ChartoInt(columnConvert character varying)
  RETURNS integer AS
  $BODY$
  SELECT CASE WHEN trim($1) SIMILAR TO '[0-9]+'
        THEN CAST(trim($1) AS integer)
    ELSE NULL END;
  $BODY$
  LANGUAGE 'sql' IMMUTABLE STRICT;

Feito a função, só é preciso fazer uma instrução SQL, que realize uma conversão de tipos de dados utilizando para isso a função criada. Neste caso o nome dela é fx_ChartoInt(columnConvert character varying) .

Instrução SQL

  ALTER TABLE fx_Salario ALTER COLUMN codigoSalario TYPE integer USING fx_ChartoInt(codigoSalario);

Pronto.. agora sim, é possível fazer a conversão de uma coluna do tipo CHAR(10) para Integer e o principal, garantindo a integridade dos dados.

Veja a relação completa dos artigos de Rodrigo Rosa Fragoso

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 3.00/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (939 votos)

Opinião dos Leitores

leandro
23 Nov 2010, 11:20
Tai mais uma dica super interessante, e muito util por sinal..
Alexandre Heitor Schmidt
23 Nov 2010, 08:24
Não esqueça de dar DROP do CAST depois de utiliza-lo. Assim você evita dores de cabeça no futuro e mantém a base de dados sem lixo.
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script
Treinamentos, Consultorias e Soluçoes em TI. Baseados em softwares livres e padrões abertos para ambientes de missão crítica

Submarino.com.br

Read in English - Uma Maneira Divertida de Aprender Inglês