De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
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.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários