[firebase-br] AJUDA NA STORED PROCEDURE ABAIXO - ME AJUDEM.

Lucio - UniData® luciocobo em terra.com.br
Seg Set 11 12:05:06 -03 2006


Ai Rubens  ajo que é isso

CREATE PROCEDURE TESTE (
    E_DATAINI DATE,
    E_DATAFIM DATE)
RETURNS (
    S_DIASEMANA INTEGER,
    S_DATA DATE)
AS
DECLARE VARIABLE V_DIA INTEGER;
DECLARE VARIABLE V_FERIADO INTEGER;
BEGIN
  WHILE (E_DATAFIM > E_DATAINI) DO
   BEGIN
     SELECT COUNT(1) FROM FERIADOS WHERE DATA =:E_DATAINI INTO :V_FERIADO;
     V_DIA=EXTRACT(WEEKDAY FROM E_DATAINI);
     if (:V_FERIADO IS NULL) then begin
       S_DIASEMANA=V_DIA;
       S_DATA=E_DATAINI;
      SUSPEND;
     END
     else if (V_DIA <>0 AND V_DIA<>6) THEN
      BEGIN
       S_DIASEMANA=V_DIA;
       S_DATA=E_DATAINI;
       SUSPEND;
      END
      E_DATAINI=E_DATAINI+1;
   END
END
----- Original Message -----
From: "Rubens J Rodrigues" <rubens.rodrigues em abrevo.com.br>
To: <lista em firebase.com.br>
Sent: Monday, September 11, 2006 9:30 AM
Subject: [firebase-br] AJUDA NA STORED PROCEDURE ABAIXO - ME AJUDEM.


Pessoal,

Tenho cenário abaixo . . . onde preciso extrair todos os dias realmente
úteis de um determinado período, neste caso passado via parametros.
Porém estou com dificuldades para montar a procedure, ora entro no loop
e fico travo o select, ora o resultado duplica alguns dias.
Então, baseado no codigo abaixo e com a experiência de muitos de vocês,
gostaria de uma ajuda.

A idéia é : Montar uma rotina em sql, onde eu traga no resultado os dias
realmentes úteis dentro de um período especificado via parametros.

Conto com a ajuda de vocês,

Att.

Rubens


TABELA DE FERIADOS.
CODFERIADO INT,
DATAFERIADO DATE



CREATE PROCEDURE TESTE(
   E_DATAINI DATE,
   E_DATAFIM DATE)
RETURNS(
   S_DIASEMANA INTEGER,
   S_DATA DATE)
AS
DECLARE VARIABLE V_DIA INTEGER;
DECLARE VARIABLE V_FERIADO INTEGER;
BEGIN

  WHILE (E_DATAFIM > E_DATAINI) DO
   BEGIN

     SELECT COUNT(1) FROM FERIADOS WHERE DATA=:E_DATAINI INTO :V_FERIADO;

     IF (:V_FERIADO > 0) THEN
      BEGIN
       E_DATAINI = E_DATAINI +1;
       SUSPEND;
      END

     V_DIA=EXTRACT(WEEKDAY FROM E_DATAINI);

     IF (V_DIA <>0 AND V_DIA<>6) THEN
      BEGIN
       S_DIASEMANA=V_DIA;
       S_DATA=E_DATAINI;
       E_DATAINI=E_DATAINI+1;
       SUSPEND;
      END

   END
END


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa






Mais detalhes sobre a lista de discussão lista