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

Responder a