Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

PChiesi

[Resolvido] Query. Mudar de SQL -> Oracle

Recommended Posts

Ola Galera esperta do Forum, venho aqui com um pedido de ajuda por estou muito encrencado

 

Meu chefe pediu para mim transformar uma Query que estava em SQL para Oracle, porém eu estou encontrando dificuldades para isso, será que alguém poderia me ajudar?

 

SELECT

bg_bug_id AS "DEFEITO",

BG_SUMMARY as "Nome",

BG_RESPONSIBLE as "DETECTADO POR",

BG_PRIORITY as "Prioridade",

BG_USER_03 as "Status",

BG_USER_10 as "Tempo em DS",

BG_USER_04 as "Tempo em QA",

CONVERT(datetime,bg_user_05,103) AS "DATA ABERTURA",

CONVERT(datetime,bg_user_09,103) AS "DATA FECHAMENTO",

CASE

WHEN

DATEDIFF(n,'01/01/2001',CONVERT(datetime,bg_user_09,103)) - DATEDIFF(n,'01/01/2001',CONVERT(datetime,bg_user_05,103)) >= '0'

THEN

DATEDIFF(n,'01/01/2001',CONVERT(datetime,bg_user_09,103)) - DATEDIFF(n,'01/01/2001',CONVERT(datetime,bg_user_05,103))

ELSE

DATEDIFF(n,CONVERT(datetime,bg_user_05,103),getdate())

END AS "TEMPO EM MUNUTOS"

FROM

td.BUG

/*GROUP BY

bg_bug_id

*/

ORDER BY

bg_bug_id ASC

Tem mais 2

 

SELECT

id_defeito,

--DATEDIFF(n,CONVERT(datetime,dt_abertura_defeito,103),CONVERT(datetime,dt_fechamento_defeito,103)) as "tempo_defeito",

usuario,

status_antigo,

status_novo,

CASE

WHEN CONVERT(datetime,data_inicio,103) IS NOT NULL

THEN CONVERT(datetime,data_inicio,103)

ELSE CONVERT(datetime,dt_abertura_defeito,103)

END as "data_inicio",

CONVERT(datetime,data_fim,103) as "data_fim",

DATEDIFF(

n,

CASE

WHEN CONVERT(datetime,data_inicio,103) IS NOT NULL

THEN CONVERT(datetime,data_inicio,103)

ELSE CONVERT(datetime,dt_abertura_defeito,103)

END,

CONVERT(datetime,data_fim,103)

) as "tempo_atividade"

FROM

(

SELECT

bd_base_aux.au_entity_id as "id_defeito",

bd_base_aux.data_abertura as "dt_abertura_defeito",

bd_base_aux.data_fechamento as "dt_fechamento_defeito",

au_user as "usuario",

ap_old_value as "status_antigo",

ap_new_value as "status_novo",

(

SELECT

bd_select_aux.au_time

FROM

(

SELECT

row_number() OVER( ORDER BY CONVERT("integer",alog_enc.au_entity_id) ASC, alog_enc.au_time ASC ) as "num_linha",

CONVERT("integer",alog_enc.au_entity_id) as "au_entity_id",

alog_enc.au_time

FROM

td.AUDIT_LOG "alog_enc" , td.AUDIT_PROPERTIES "aprop_enc"

WHERE

aprop_enc.ap_action_id = alog_enc.au_action_id and

aprop_enc.ap_field_name = 'BG_USER_03'

) as "bd_select_aux"

WHERE

bd_select_aux.au_entity_id = bd_base_aux.au_entity_id and

bd_select_aux.num_linha = (bd_base_aux.num_linha - '1')

) as "data_inicio",

bd_base_aux.au_time as "data_fim"

FROM

(

SELECT

row_number() OVER( ORDER BY CONVERT("integer",alog.au_entity_id) ASC, alog.au_time ASC ) as "num_linha",

CONVERT("integer",alog.au_entity_id) as "au_entity_id",

alog.au_user,

aprop.ap_old_value,

aprop.ap_new_value,

bug.bg_user_05 as "data_abertura",

bug.bg_user_09 as "data_fechamento",

alog.au_time

FROM

td.AUDIT_LOG "alog"

LEFT JOIN td.BUG "bug" ON alog.AU_ENTITY_ID = bug.BG_BUG_ID

, td.AUDIT_PROPERTIES "aprop"

WHERE

aprop.ap_action_id = alog.au_action_id and

aprop.ap_field_name = 'BG_USER_03'

) as "bd_base_aux"

) as "bd_auxiliar"

ORDER BY

id_defeito ASC

Mais 1

 

SELECT

AU_ENTITY_ID as "ID", AU_USER as "Detectado por", AP_OLD_VALUE as "Status Anterior", AP_NEW_VALUE as "Novo Status", AU_TIME as "Alterado em"

FROM

td.AUDIT_LOG , td.AUDIT_PROPERTIES

WHERE

AP_ACTION_ID=AU_ACTION_ID and AP_FIELD_NAME = 'BG_USER_03'

ORDER BY

convert("integer",AU_ENTITY_ID) ASC, AU_TIME ASC

Então, elas fazem o seguinte, a primeira pega e calcula o tempo em que ficou aberto o DEFEITO nos status de QA e de DS

 

O segundo, mostra o tempo em cada Status

 

O terceiro mostra a transição de status.

 

Se alguém puder ajudar, agradeço muito

 

PS: O Forum não me deixa formatar para ficar tudo alinhado no post

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quais as funções em que você tem dúvida ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quais as funções em que você tem dúvida ?

 

Então cara, tem algumas que não temos no Oracle, com por exemplo o DateDiff, que no caso é uma mão na roda no SQL, e para ser sincero eu conheço muito pouco mesmo de Oracle, então eu não sei lhe informar quais funções tem como aproveitar =/

 

E detalhe, eu tenho que fazer isso pra amanhã de manhã, e eu nem sou da parte de banco de dados, sou da customização de QC, ou seja, estou na roça

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dicas :

 

Diferença de datas , faça uma mesmos a outro terá em dias.

 

to_char - converte data para char

 

to_date converte date para char

 

|| concatena string ex: a || b

 

rownum - número da linha no select

 

rowid - endreço da linha

 

sysdate - data do sistema

 

user - usuário

 

Espero que ajude....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria legal publicar a solução pode ajudar alguém com o mesmo problema.

 

Sinto não poder ter te ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.