Página 1 de 1

Converter consulta SQL para Oracle

Enviado: Seg, 04 Out 2021 12:36 pm
por rhicky
Amigos,
Alguém pode me ajudar a converter a consulta SQL para Oracle:

Selecionar tudo

SELECT 
		(F.CHAPA+' - '+F.NOME)								AS 'FUNCIONARIO', 
		(FN.CODIGO+' - '+FN.NOME)							AS 'FUNCAO', 
		CONVERT(VARCHAR(10), H.DTMUDANCA, 103)				AS 'INICIO', 
		LEAD(CONVERT(VARCHAR(10), H.DTMUDANCA, 103), 1 , 'ATUAL') 
		     OVER(ORDER BY H.DTMUDANCA)                     AS 'FIM',
		DATEDIFF(MM, H.DTMUDANCA, 
				 LEAD(H.DTMUDANCA, 1 , GETDATE()) 
				      OVER(ORDER BY H.DTMUDANCA))			AS DIFF

FROM PFUNC F WITH(NOLOCK)

INNER JOIN PFHSTFCO H WITH(NOLOCK)
	ON  H.CODCOLIGADA = F.CODCOLIGADA
	AND H.CHAPA       = F.CHAPA

INNER JOIN PFUNCAO FN WITH(NOLOCK)
	ON  FN.CODCOLIGADA = H.CODCOLIGADA
	AND FN.CODIGO      = H.CODFUNCAO

WHERE F.CODCOLIGADA = 1
AND   F.CHAPA       = '01018379'
AND   H.DTMUDANCA BETWEEN '' AND ''

ORDER BY H.DTMUDANCA ASC

Re: Converter consulta SQL para Oracle

Enviado: Dom, 10 Out 2021 4:54 pm
por tiago_pimenta
Respondido na MP que você me enviou !!!

Re: Converter consulta SQL para Oracle

Enviado: Qua, 13 Out 2021 11:43 am
por dr_gori
Olá Tiago
Manda a resposta aqui no tópico, daí fica disponível pra comunidade. (A não ser que isso seja algo confidencial).

Re: Converter consulta SQL para Oracle

Enviado: Dom, 17 Out 2021 11:32 pm
por tiago_pimenta
dr_gori escreveu:
Qua, 13 Out 2021 11:43 am
Olá Tiago
Manda a resposta aqui no tópico, daí fica disponível pra comunidade. (A não ser que isso seja algo confidencial).
Claro dr_gori,

Segue a resposta que dei via MP
Bom dia rhicky, tudo bem ???

Cara, eu consigo ti ajudar explicando o que cada função do SQL Server faz... A partir dai, tem que pegar a função equivalente no Oracle.

Selecionar tudo

convert(varchar(10), h.dtmudanca, 103)
Aqui ele está convertendo a coluna para um formato de data especifico (103), de cabeça não lembro que formato é, mas seria no Oracle o to_date(h.dtmudanca, 'dd/mm/rrrr')

Selecionar tudo

lead(convert(varchar(10), h.dtmudanca, 103), 1 , 'atual') over(order by h.dtmudanca)
Lead over tem no Oracle também... Acho melhor do que eu explicar aqui, você dar uma procurada em funções analíticas aqui no fórum ou na internet mesmo. Eu acredito que a função no SQL Server, tem o mesmo sentido que a função do Oracle está...
Esse daqui nada mais é do que o simples data1 - data2

Selecionar tudo

inner join
E o inner join só muda a forma de fazer.... No Oracle nós usamos o sinal de igual, e quando precisamos fazer um left, right ou qualquer outro tipo de join, usamos o (+), dependendo do lado do "="

beleza ??? Acho que já é um caminho !!!


Re: Retornar tempo de acordo com data de mudança em cada reg
Enviado: Ter, 05 Out 2021 11:32 am
por rhicky

Olá Thiago, tudo bem?
Você tem um tel/zap para contato?

Consegue me ajudar na conversão da consulta sql abaixo para oracle?

Selecionar tudo

SELECT
(F.CHAPA+' - '+F.NOME) AS 'FUNCIONARIO',
(FN.CODIGO+' - '+FN.NOME) AS 'FUNCAO',
CONVERT(VARCHAR(10), H.DTMUDANCA, 103) AS 'INICIO',
LEAD(CONVERT(VARCHAR(10), H.DTMUDANCA, 103), 1 , 'ATUAL')
OVER(ORDER BY H.DTMUDANCA) AS 'FIM',
DATEDIFF(MM, H.DTMUDANCA,
LEAD(H.DTMUDANCA, 1 , GETDATE())
OVER(ORDER BY H.DTMUDANCA)) AS DIFF

FROM PFUNC F WITH(NOLOCK)

INNER JOIN PFHSTFCO H WITH(NOLOCK)
ON H.CODCOLIGADA = F.CODCOLIGADA
AND H.CHAPA = F.CHAPA

INNER JOIN PFUNCAO FN WITH(NOLOCK)
ON FN.CODCOLIGADA = H.CODCOLIGADA
AND FN.CODIGO = H.CODFUNCAO

WHERE F.CODCOLIGADA = 1
AND F.CHAPA = '01018379'
AND H.DTMUDANCA BETWEEN '' AND ''

ORDER BY H.DTMUDANCA ASC