Mudando a Data de pesquisa.

Oracle

17/10/2016

Boa Tarde, Pessoal

Seguinte estou criando um Select para um relatório, e me deparei com a seguinte dificuldade, usei bastante a função do Oracle "SYSDATE", agora quero ver um jeito de pode alterar as datas todas de uma vez, já tentei inserir uma variável, mas não consegui.

Segue parte do código, neste caso esta só com uma linha após o select, mas no original tem muitas, semelhantes a ela:
SELECT

"TRUNC"("MONTHS_BETWEEN"(SYSDATE ,BEM.DTINIREFCIAP)) AS MESES_JA_UTILIZADA


FROM

TCIBEM BEM,
TGFPRO PRO


WHERE BEM.CODEMP = 1
AND PRO.CODPROD = BEM.CODPROD

AND BEM.DTFIMREFCIAP >= "TRUNC"(SYSDATE, 'MONTH')



Desde já agradeço, e muito a ajuda pessoal.
Sergio

Sergio

Curtidas 0

Respostas

Roberto Spernega

Roberto Spernega

17/10/2016

Bom dia Sergio,

Estes SELECTS estão num script (arquivo texto), Forms, Reports, Procedures ou Functions?
Depende de onde estiver a solução é diferente.

Se forem scripts, puros, que você executa pelo sqlplus, tem que criar uma VARIABLE do tipo texto.
variable v_data varchar2(10);

E se referenciar a ela com a formatação de data.
To_date(:v_data,'dd/mm/yyyy')

SELECT TRUNC(MONTHS_BETWEEN(To_date(:v_data,'dd/mm/yyyy'),BEM.DTINIREFCIAP)) AS MESES_JA_UTILIZADA
FROM TCIBEM BEM, TGFPRO PRO
WHERE BEM.CODEMP = 1
AND PRO.CODPROD = BEM.CODPROD
AND BEM.DTFIMREFCIAP >= TRUNC(To_date(:v_data,'dd/mm/yyyy'), 'MONTH')

seria mas ou menos isso.

Se for um bloco PLSQL já é de outro jeito...
GOSTEI 0
Sergio

Sergio

17/10/2016

Bom Dia, Roberto

Maninho sou leigo ainda no assunto, mas uso esse select para um relatório no Navicat, consulta direto no banco de dados de meu sistema.
Coloquei como me falou mas apresentou o erro:

[SQL]SELECT 
TRUNC(MONTHS_BETWEEN("TO_DATE"(:v_data,''dd/mm/yyyy''),BEM.DTINIREFCIAP)) AS MESES_JA_UTILIZADA

FROM TCIBEM BEM, TGFPRO PRO
WHERE BEM.CODEMP = 1
AND PRO.CODPROD = BEM.CODPROD
[Err] ORA-01008: nem todas as variáveis são limitadas
GOSTEI 0
Roberto Spernega

Roberto Spernega

17/10/2016

Sergio,

Este erro é de variável não encontrada.
Não conheço o NAVICAT, vi apenas que é uma ferramenta para acessar bancos de dados.

[tagcod][SQL]variable v_data varchar2(10);
[tagcod][SQL]SELECT
TRUNC(MONTHS_BETWEEN("TO_DATE"(:v_data,''dd/mm/yyyy''),BEM.DTINIREFCIAP)) AS MESES_JA_UTILIZADA
FROM TCIBEM BEM, TGFPRO PRO
WHERE BEM.CODEMP = 1
AND PRO.CODPROD = BEM.CODPROD
GOSTEI 0
Sergio

Sergio

17/10/2016

Boa Tarde, Roberto

Voltei para o Sql Developer e funcionou que uma beleza.

Muito obrigado, maninho.
GOSTEI 0
POSTAR