Mostrando postagens com marcador datas. Mostrar todas as postagens
Mostrando postagens com marcador datas. Mostrar todas as postagens

quarta-feira, agosto 01, 2012

Executando um loop entre uma diferença de datas no Oracle

HI,

Vou precisar criar uma procedure para inserir/atualizar dados de acordo com um período informado. Se for para inserir, criar um registro para cada data do período informado.

Ex: Período de 01/06/2012 à 03/06/2012, taxa 5%

Quando for inserir, a procedure vai criar 3 registros na tabela
01/06/2012 - 5
02/06/2012 - 5
03/06/2012 - 5

Antes de partir para a procedure, criei a lógica que vou precisar.


declare


data_inicial date;
data_final date;
num_dias number;

begin


data_inicial := to_date('10/06/2012','DD//MM/YYYY');
data_final := to_date('20/06/2012','DD//MM/YYYY');


dbms_output.put_line( 'data inicial: ' || to_char(data_inicial,'DD/MM/YYYY'));
dbms_output.put_line( 'data final: ' || to_char(data_final,'DD/MM/YYYY'));


num_dias := (data_final - data_inicial)+1;


dbms_output.put_line( 'dias: ' || num_dias);
dbms_output.put_line( '' );


for i in 1..num_dias loop
  dbms_output.put_line( 'data: ' || to_char((data_inicial-1)+i,'DD/MM/YYYY') || ', dia ' || i);
end loop;


end;

Resultado da execução da instrução pl/sql




Nesse endereço tem informações sobre loop no oracle


Fiquem na Paz!!!

sábado, março 21, 2009

Retornar a data do primeiro e do último dia da semana

HI,

Estou trabalhando em uma rotina para enviar a rota da semana para os vendedores. Minha idéia foi de enviar todos os registros da semana, e não apenas do dia atual até o último dia da semana.

Então como fazer para enviar os registros que estão entre Domingo e Sábado ?

Abrir o delphi e fiz um algotimo para pegar a data do primeiro dia (Domingo) da semana e do último (Sábado) dia.

Ficou assim:

procedure TForm1.BitBtn1Click(Sender: TObject);
Var DiaSemanaHoje : Byte;
begin
DiaSemanaHoje := DayOfWeek(Date());

Edit2.Text := DateToStr(Date() - (DiaSemanaHoje - 1));
Edit3.Text := DateToStr(Date() + (7 - DiaSemanaHoje));
end;

Preciso utiliza isso no Oracle. Então lá vou eu para a home page do banco de dados (utilizo o oracle express aqui no note).

Peguei o exemplo que se encontra aqui no blog para pegar o dia da semana e bolei essa Sql:

select SYSDATE AS HOJE,
SYSDATE - (to_char(SYSDATE, 'D') - 1) AS DOMINGO,
SYSDATE + (7 - to_char(SYSDATE, 'D')) AS SABADO
from dual

Pronto. Já posso trabalhar com essa lógica no Where.

Mas aí achei um jeito mais simples, hehehe.

Pegar pelo dia da semana no ano.

Então o Where vai ficar assim (Delphi):

Sql.Add('Where to_char(SYSDATE, ''WW'') = ' + IntToStr(WeekOfTheYear(Date)));

Espero que possa ajudar mais alguém com isso.


[editando]

Mostrei esse código a um amigo que é DBA e ele me mostrou outra maneira de pegar as datas do primeiro e último dia da semana utilizando a função do NEXT_DAY do Oracle.

select sysdate AS HOJE ,
TRUNC(next_day(sysdate,'MONDAY')-8) as DOMINGO,
TRUNC(next_day(sysdate,'SATURDAY')) as SABADO
from dual

Acabei utilizando essa lógina no meu Where. É que pegando a semana do Ano deu bug, hehehe. Não retornou a Segunda e a Terça.

Where TRUNC(Data) BetWeen TRUNC(next_day(sysdate,'MONDAY')-8) and TRUNC(next_day(sysdate,'SATURDAY'))

Esse TRUNC é para retornar a data sem a parte da hora.

[/editando]

Até +