Em 27 de abril de 2011 18:32, Leandro DUTRA
<[email protected]> escreveu:
> Precisas mesmo manter esse código?
>
> Normalmente, o ideal é não misturar informações num atributo.
>
> E, como identificador, o ideal seria uma chave natural, inda que
> composta; caso não seja possível, um código que não dependa de informação
> nenhuma.
Concordo com o Leandro e acrescento: não faz sentido (pelo pouco que
sabemos desse caso) manter um atributo com valores desse tipo que você
possa obtê-los facilmente como o ultimo dígito do ano, além de poder
causar confusão (2011, 2001 - 1 para ambos), o mesmo aplica-se ao DV
que é apenas para conferir a digitação do código.
Em todo o caso se não tiver como fugir dessa formatação de código (o
que eu acredito ser pouco provável) dá pra fazer no default do campo
da tabela:
drop table teste02 cascade;
drop sequence teste02_seq;
create sequence teste02_seq;
create table teste02(
codigo varchar(10) default substr(extract(year from now())::char(4),
4, 1) || to_char(nextval('teste02_seq'), '0000000') || gera_dv(),
nome varchar(10));
No seu caso bastaria alterar o valor default do campo e criar uma
função gera_dv().
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral