Fórum Resetar Sequence todo mês #391283
25/11/2010
0
tenho uma sequence no meu banco que tem como chave primaria um id e uma data, presiso que esse id que é automaticamente gerado por uma sequencia seja resetado todo o dia primeiro de cada mês. alguem tem alguma sugestão
Desde ja agradeço.
Jardel Gugel
Curtir tópico
+ 0Posts
25/11/2010
Jair N.
existe atualmente alguma função que gera a seqüência do seu "ID"?
Gostei + 0
25/11/2010
Jair N.
SELECT 1 + COALESCE ((
SELECT MAX(tabela.id)
FROM tabela
HAVING EXTRACT(MONTH FROM MAX(tabela.data)) = EXTRACT(MONTH FROM CURRENT_DATE)
AND EXTRACT(YEAR FROM MAX(tabela.data)) = EXTRACT(YEAR FROM CURRENT_DATE)), 0)
Gostei + 0
30/11/2010
Jardel Gugel
Tenho uma tabela que contem essa chave primaria,
CONSTRAINT os_pk PRIMARY KEY (codos, dataos)
sendo que o codos é um inteiro que é gerenciado e gerado por uma sequence que pretendo setar todo mês, e também tenho a dataos que é uma data de abertura de ordem de serviço essa é sempre a data e hora de criação da ordem.
o que quero fazer é setar a sequence que gerência o código da ordem de serviço todo inicio de mês.
Isso manual sei fazer queria uma forma de automatizar a reiniciação da sequence mas não sei como se usando trigger ou procedure, ou se o postgres disponibiliza uma outra forma.
ate mais Jardel
Gostei + 0
01/12/2010
Jair N.
CREATE OR REPLACE FUNCTION funint_seqos(data date) RETURNS integer AS
$BODY$
DECLARE
new_day date;
BEGIN
IF (data IS NOT Null) THEN
new_day := data;
ELSE
new_day := CURRENT_DATE;
END IF;
-- Pega o último número seqüêncial no período informado a este acrescido de mais um...
RETURN 1 + COALESCE((SELECT MAX(os.codos) FROM os HAVING EXTRACT(MONTH FROM MAX(os.dataos)) = EXTRACT(MONTH FROM new_day) AND EXTRACT(YEAR FROM MAX(os.dataos)) = EXTRACT(YEAR FROM new_day)), 0);
-- O retono para valor não encontrado será no mínimo um...
END;
$BODY$
LANGUAGE plpgsql;
ALTER TABLE os ALTER COLUMN codos SET DEFAULT funint_seqos(CURRENT_DATE);
Quando for fazer uma inclusão a exemplo chame a função para passagem do parâmetro exemplo:
"codos = funint_seqos(datsos)"; ou na consulta "SELECT funint_seqos(:datsos)";
Gostei + 0
01/12/2010
Jair N.
CREATE OR REPLACE FUNCTION funint_seqos(data date) RETURNS integer AS
$BODY$
DECLARE
new_day date;
BEGIN
IF (data IS NOT Null) THEN
new_day := data;
ELSE
new_day := CURRENT_DATE;
END IF;
-- Pega o último número seqüêncial no período informado acrescido de mais um...
RETURN COALESCE((SELECT MAX(os.codos) + 1 FROM os WHERE EXTRACT(MONTH FROM os.dataos) = EXTRACT(MONTH FROM new_day) AND EXTRACT(YEAR FROM os.dataos) = EXTRACT(YEAR FROM new_day)), 1);
-- O retono para valor não encontrado será no mínimo um...
END;
$BODY$
LANGUAGE plpgsql;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)