PauloTI 0 Denunciar post Postado Dezembro 8, 2015 Atualmente, tenho um processo que funciona EM PARTES, porém estou com uma duvida e preciso solucionar este problema. EXISTEM 2 VARIÁVEIS V_MONTHS V_YEAR EXISTEM DOIS SELECTS SELECT TRUNC(TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'YYYY')) INTO V_YEAR FROM DUAL; ( PEGA O ANO ATUAL ) SELECT TO_CHAR(SYSDATE, 'MM')-1 INTO V_MONTHS FROM DUAL; (PEGA MÊS ANTERIOR AO ATUAL ) Essas duas variáveis são usadas em um select logo abaixo do processo. Select: bla bla bla bla bla FROM CICLE X WHERE X. YEAR = V_YEAR AND X. MONTHS = V_MONTHS ; Lembrando que isso está dentro de um Bloco PL/SQL e que o exemplo acima, é bem Cru. A questão é a partir de 2016, vai ter um problema " Ele vai pegar ANO atual " mas e o Mês12 de dezembro de 2015? Este processo irá entrar em produção ainda este mês, por este motivo, preciso resolver isso o quanto antes. Alguém tem alguma ideia por gentileza? É necessário que mês que vem 01/2016, ele busque o MÊS -1 que no caso seria, 12 do ano de 2015. Alguém poderia me ajudar? Obrigado. Att. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Dezembro 8, 2015 Combine add_months (pode ser negativo) com o to_char. https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions004.htm https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions180.htm Compartilhar este post Link para o post Compartilhar em outros sites
PauloTI 0 Denunciar post Postado Dezembro 8, 2015 Mota, Boa noite. Perceba, que já estou fazendo isso, e eu preciso que seja uma solução separada, pelo fato das variáveis. SELECT TRUNC(TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'YYYY')) INTO V_YEAR FROM DUAL; ( PEGA O ANO ATUAL ) SELECT TO_CHAR(SYSDATE, 'MM')-1 INTO V_MONTHS FROM DUAL; (PEGA MÊS ANTERIOR AO ATUAL ) Acima, de uma olhada em como está hoje, tem " INTO <variavel > Como vou jogar no WHERE sendo que as colunas da Tabela no WHERE são especificas Mês e ANO e é por este motivo, que faço dois SELECTS, um para Mês-1 e Ano Atual. Consegue compreender ou eu não expliquei direito? Obrigado pela resposta. att Compartilhar este post Link para o post Compartilhar em outros sites
PauloTI 0 Denunciar post Postado Dezembro 8, 2015 Assim exemplo: SELECT TO_CHAR( ADD_MONTHS(SYSDATE,-1), 'YYYY') "Ano_ATUAL" FROM DUAL; ( Ano ATUAL ) SELECT TO_CHAR( ADD_MONTHS(SYSDATE,-1), 'MM') "Mes_anterior" FROM DUAL; ( Mês Anterior) Mês que vem é 01/2016 Mas esses SELECTS acima, vão me trazer 12/2015 ? Em testes no meu banco pessoal, eu teria que fazer isso, para retornar por exemplo 2014 SELECT TO_CHAR( ADD_MONTHS(SYSDATE,-12), 'YYYY') "Next month" FROM DUAL; Essa é minha duvida, por que, como vai entrar em produção, precisar ficar automatizado, e eu nunca fiz isso.. att. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Dezembro 9, 2015 Estou num tablet , muito ruim de editar código, mas bastaria , um só select , Dando add months -1 para a data atual obtendo o ano e mescdo mes anterior Em Novembro 15 > outubro 15 Dezembro 15 > novembro 15 Janeiro 16 > dezembro 15 Se for o caso edito amanhã o exemplo Compartilhar este post Link para o post Compartilhar em outros sites
PauloTI 0 Denunciar post Postado Dezembro 9, 2015 Boa noite, Mota. Fico no aguardo do exemplo, realmente não sei como implementar isso em código. Mota, sempre lembrando, que eu preciso que seja em selects separados. Devido ao Where e as Variáveis. Att. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Dezembro 9, 2015 Não seria isto , obter o ano e mês anteriores a data corrente ? SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-1), 'YYYY') "Ano_ATUAL", TO_CHAR(ADD_MONTHS(SYSDATE,-1), 'MM') "mes_ATUAL" into v_ano , v_mes FROM DUAL; Compartilhar este post Link para o post Compartilhar em outros sites