Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bom dia!
Eu tenho uma tabela que é atualizada(faz carga programada) todos os dias ás 5 da manhã.
Exemplo, essa é uma consulta feita agora 05/02/2015
VALOR1 | VALOR2 | VALOR3 |
---|---|---|
10 | 40 | 60 |
20 | 50 | 80 |
Amanhã quando eu fizer a consulta será outros valores. Eu quero criar um calendário a partir de hoje, que guarde essa tabela acima com a data de hoje, pra que amanhã(06/02/2015) eu tenha a opção também de consultar(mostrar os valores) essa tabela de hoje(05/02/2015) e no dia 07/02/2015 eu tenha a opção de consultar os valores do dia 06/02/2015 e assim sucessivamente. Resumindo é como se eu tivesse guardando consultas anteriores e identificando cada consulta pela data da carga, e a carga é feita todos os dias, são valores de estoque, que mudam todos os dias.
Segue o exemplo, basta realizar a recarga várias vezes.
Bom, vou te passar um exemplo de como se fazer, mas existem N formas!
Vamos imaginar que seu select no banco de dados seja:
SQL SELECT VALOR1, VALOR2, VALOR3 FROM TABELA;
a sua lógica para gerar esse qvd com a foto do dia será:
TABELA:
SQL SELECT VALOR1, VALOR2, VALOR3, sysdate() as DATA FROM TABELA;
CONCATENATE
LOAD
VALOR1,
VALOR2,
VALOR3,
DATA
FROM TABELA.QVD (QVD)
WHERE NOT EXISTS(DATA); //Carrega todo o qvd desprezando a data do dia em que esta sendo gerado, em caso da query ter sido rodada mais de uma vez ao dia.
STORE TABELA INTO TABELA.QVD (qvd);
OBS: Note que em primeiro lugar você deve gerar (manualmente) o TABELA.QVD para que essa rotine funcione. É possível deixar essa rotina de primeira geração automática também.
Ola Breno,
Para fazer isso voce precisa criar uma carga incremental, isso pode ser feito armazenando os dados em arquivos QVD's. Entao basicamente no script da sua aplicacao voce precisa usar uma variavel que armazene a data da carga.
Ex:
LET vDataCarga = Date(Today(),'YYYY-MM-DD');
Observe que estou definindo um formato de data YYYY-MM-DD, isso nao e' uma regra mas e' um formato que acaba sendo bastante conveniente, ja vou explicar por que.
Entao depois que a sua tabela e' carregada em memoria, voce adiciona uma linha de comando para exporta-la para o formato qvd:
STORE Tabela INTO Tabela_$(vDataCarga).qvd;
O resultado disso sera a criacao de varios arquivos, um para cada dia onde a carga e' executada:
Tabela_2015-02-05.qvd;
Tabela_2015-02-04.qvd;
Tabela_2015-02-03.qvd;
(...)
Finalmente na sua aplicacao voce pode escolher quais arquivos deseja carregar, uma forma facil de fazer isto e' usando o caracter coringa *. Ex:
1. Carregar todos os arquivos de 2015
LOAD * FROM Tabela_2015*.qvd;
2. Carregar todos os arquivos de Fev/2015
LOAD * FROM Tabela_2015-02*.qvd;
3. Carregar uma data especifica:
LOAD * FROM Tabela_2015-02-05.qvd;
(Aqui da pra ver como o formato de data fica bem conveniente).
Obrigado, vou tentar de ambas as formas e mando uma resposta.
Yuri não entendi sua observação no seu exemplo.
Breno, a primeira vez que você executar esse código, caso não tenha o qvd TABELA.QVD criado, dará erro, pois você não possui o qvd ainda. Nesse caso você teria que cria-lo com a rotina:
TABELA:
SQL SELECT VALOR1, VALOR2, VALOR3, sysdate() as DATA FROM TABELA;
STORE TABELA INTO TABELA.QVD (qvd);
e depois de criar o qvd você consegue executar a rotina que te passei.
Depois te mando um exemplo para que esse processo execute mesmo que esse qvd ainda não exista.
Ok
Eu achei o exemplo do Cesar mais simples, mas terá um uso maior de memoria do servidor, estou certo ?
Breno, a diferença do script do cesar.accardi com o meu é que o do Cesar vai gravar um qvd por dia. Isso é ruim? Não.
Eu acho viável dividir o qvd somente quando a informação armazenada seja muito grande. Pergunta: Qual o volume de registros, por dia, a sua tabela retorna?
Yuri , 4.500 de Registros a média , gerei o primeiro qvd da data de hoje com o exemplo do Cesar e chegou 234 KB.