Fórum Zerar Sequencial Na Virada de Ano #28374
06/03/2006
0
Gostaria de saber se é possível configurar um seqüencial para ele zerar numa data especifica, por exemplo: dia 01/01/yyyy independente do ano. E como seria esse comando SQL? :yeah:
Desde já agradeço
Desde já agradeço
Gabrielherdt
Curtir tópico
+ 0
Responder
Posts
06/03/2006
Motta
Por sequence não, teria de usar uma solução envolvendo tabela/function.
Responder
Gostei + 0
07/03/2006
Rosterne
Pra zerar uma sequence vc terá que dropa-la e depois cria-la novamente.
Fiz da seguinte forma:
Criei uma procedure q checa a data e caso tenha mudado de ano dropa e recria novamente a sequence:
CREATE OR REPLACE PROCEDURE ZERA AS
cur integer;
rc integer;
d varchar2(10);
BEGIN
select to_char(sysdate, ´dd-MON´) into d from dual;
if d = ´01-JAN´ then
cur := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(cur, ´drop sequence sq´, DBMS_SQL.NATIVE);
rc := DBMS_SQL.EXECUTE(cur);
DBMS_SQL.CLOSE_CURSOR(cur);
cur := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(cur, ´create sequence sq start with 1 increment by 1´, DBMS_SQL.N
ATIVE);
rc := DBMS_SQL.EXECUTE(cur);
DBMS_SQL.CLOSE_CURSOR(cur);
end if;
END;
/
e depois criei um job q rodará todo dia e executará a procedure.
variable v number;
exec DBMS_JOB.SUBMIT(:v,´zera;´,SYSDATE, ´sysdate + 1440/1440´);
Espero ter ajudado.
Fiz da seguinte forma:
Criei uma procedure q checa a data e caso tenha mudado de ano dropa e recria novamente a sequence:
CREATE OR REPLACE PROCEDURE ZERA AS
cur integer;
rc integer;
d varchar2(10);
BEGIN
select to_char(sysdate, ´dd-MON´) into d from dual;
if d = ´01-JAN´ then
cur := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(cur, ´drop sequence sq´, DBMS_SQL.NATIVE);
rc := DBMS_SQL.EXECUTE(cur);
DBMS_SQL.CLOSE_CURSOR(cur);
cur := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(cur, ´create sequence sq start with 1 increment by 1´, DBMS_SQL.N
ATIVE);
rc := DBMS_SQL.EXECUTE(cur);
DBMS_SQL.CLOSE_CURSOR(cur);
end if;
END;
/
e depois criei um job q rodará todo dia e executará a procedure.
variable v number;
exec DBMS_JOB.SUBMIT(:v,´zera;´,SYSDATE, ´sysdate + 1440/1440´);
Espero ter ajudado.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)