E se vc criasse uma function assim:
CREATE OR REPLACE FUNCTION get_codigo()
RETURNS character varying AS
$BODY$DECLARE
cod character varying;
BEGIN
cod:=extract(year from current_date)::character varying;
cod:=cod || nextval(sequencia); -- crie esta sequencia
cod:=cod || modulo11(cod); --crie esta função
return cod;
END;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
Daí, ao inserir o registro :
INSERT INTO tabela (codigo,nome) values (get_codigo(),'joão');
On 27-04-2011 17:53, Eduardo Az - EMBRASIS Informática e O&M wrote:
Pessoal, estou com uma dúvida e gostaria de uma ajuda sobre a melhor
saída:
Imaginem uma tabela de clientes, aonde o id deste cliente é montado da
seguinte maneira:
código numérico de 7 dígitos aonde:
Dígitos DESCRIÇÃO
1 ultimo algarismo do ano, ex: 2011 = 1, 2012 = 2, 2001 = 1
2-6 número serial, considerando o ano, ou seja, o numero seria
iniciado do 1 a cada ano, caso o o dig do ano repetisse, daria
sequencia a numeração do digito.
7 calculo de digito verificador, juntando os 6 dígitos
então se fosse cadastrar clientes só pra entender a brincadeira,
digamos que em 11 anos só tive 5 clientes (absurdo isto, mas só pra
exemplificar) então o campo ficaria assim:
Ano: 2000
0000014 José
0000021 Luiz
ano 2005
5000013 João
ano 2006
6000012 Maria
ano 2010
0000035 Edu
Num sistema antigo, que esta formula se aplica, feito em clipper, é um
campo que é calculado cada digito, agora, pensando em uma prática mais
elegante, teria como fazer via mistura de gatilhos e campos seriais?
se não tivesse o primeiro digito, até entendo que usar um campo serial
e um para guardar o DV sendo alimentado por um gatilho seria legal,
mas, como temos o primeiro digito, tem alguma sugestão?
Eduardo Az
Dep.TI
EMBRASIS
+55(11)8125-3845 TIM
[email protected] <mailto:[email protected]>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral