Colega, Absolutamente não é difícil : primeiro, talvez vc tenha pensado em 
GROUP BY em algum momento (agrupando por JOB_NAME), e isso TOTALMENTE NÃO se 
encaixa aqui : a questão é o GROUP BY *** faz um "SANDUÍCHE" dos n registros, 
agrupando os n registros do grupo numa linha só... Nessa linha vc pode ter uma 
CONTAGEM indicando quantos registros foram agrupados, pode ter um máximo, um 
mínimo, uma média, etc, MAS o fato é que a informação individual é logicamente 
eliminada, os N registros do grupo "viraram" um só.... 
   Isso não sendo possível, uma opção interessante é nós (dentro dos dados 
ordenados por JOB_NAME), usarmos alguma alguma funcionalidade que atribua 
(digamos) 1 para a primeira linha do JOB_NAME sendo lido, 2 para a segunda 
execução, 3 para a terceira, etc, E QUE quando mudar de JOB_NAME resete a 
contagem.... Aí ficaria MUITO FÁCIL, é só perguntar no WHERE para filtrar esse 
"número de linha dependente do JOB_NAME" .... 
    Tal funcionalidade existe há MUUUUITO TEMPO (desde as priscas eras do 
Oracle 8i), e é dada pelas funções analíticas - que, claro, servem para OUTRAS 
coisas também... Na verdade, sempre que vc quer "processar a linha 
anteriormente lida" - no seu caso para saber se mudou de JOB_NAME -, a primeira 
coisa que se pensa é em alguma função analítica... 
    Vamos a um exemplinho (com os MEUS dados, no MEU database, que obviamente 
não vão ser os mesmos que o seus) :
    
=>primeiro, vamos ver os dados brutos, só ordenados :

SYSTEM@o10gr2:SQL>SELECT
      JOB_NAME,
      STATUS,
      LOG_DATE
  FROM  DBA_SCHEDULER_JOB_RUN_DETAILS WHERE OWNER='EXFSYS'
  order by job_name, log_date;

JOB_NAME                  STATUS     LOG_DATE
------------------------- ---------- --------------------------------
RLM$EVTCLEANUP            SUCCEEDED  23/07/13 20:19:43,712000 -03:00
RLM$EVTCLEANUP            SUCCEEDED  23/07/13 20:41:15,008000 -03:00
RLM$EVTCLEANUP            SUCCEEDED  24/07/13 13:55:58,362000 -03:00
RLM$EVTCLEANUP            SUCCEEDED  24/07/13 14:41:14,720000 -03:00
RLM$EVTCLEANUP            SUCCEEDED  24/07/13 15:41:14,803000 -03:00
RLM$EVTCLEANUP            SUCCEEDED  24/07/13 16:41:14,959000 -03:00
RLM$EVTCLEANUP            SUCCEEDED  24/07/13 17:41:14,106000 -03:00
RLM$EVTCLEANUP            SUCCEEDED  24/07/13 19:20:49,353000 -03:00
RLM$EVTCLEANUP            SUCCEEDED  24/07/13 19:41:14,698000 -03:00
RLM$SCHDNEGACTION         SUCCEEDED  23/07/13 20:19:43,962000 -03:00
RLM$SCHDNEGACTION         SUCCEEDED  24/07/13 13:55:58,939000 -03:00
RLM$SCHDNEGACTION         SUCCEEDED  24/07/13 14:53:34,171000 -03:00
RLM$SCHDNEGACTION         SUCCEEDED  24/07/13 15:51:10,220000 -03:00
RLM$SCHDNEGACTION         SUCCEEDED  24/07/13 16:48:46,115000 -03:00
RLM$SCHDNEGACTION         SUCCEEDED  24/07/13 17:46:22,135000 -03:00
RLM$SCHDNEGACTION         SUCCEEDED  24/07/13 19:20:50,180000 -03:00

16 linhas selecionadas.
    
==> legal : como eu falei acima, vamos Classificar , dar um número, para cada 
linha com o mesmo JOB_NAME :

SYSTEM@o10gr2:SQL>SELECT
       JOB_NAME,
       STATUS,
       LOG_DATE,
       RANK() OVER(PARTITION BY JOB_NAME ORDER BY LOG_DATE) NUM_DA_EXEC
  FROM  DBA_SCHEDULER_JOB_RUN_DETAILS WHERE OWNER='EXFSYS';

JOB_NAME                  STATUS     LOG_DATE                         
NUM_DA_EXEC
------------------------- ---------- -------------------------------- 
-----------
RLM$EVTCLEANUP            SUCCEEDED  23/07/13 20:19:43,712000 -03:00    1
RLM$EVTCLEANUP            SUCCEEDED  23/07/13 20:41:15,008000 -03:00    2
RLM$EVTCLEANUP            SUCCEEDED  24/07/13 13:55:58,362000 -03:00    3
RLM$EVTCLEANUP            SUCCEEDED  24/07/13 14:41:14,720000 -03:00    4
RLM$EVTCLEANUP            SUCCEEDED  24/07/13 15:41:14,803000 -03:00    5
RLM$EVTCLEANUP            SUCCEEDED  24/07/13 16:41:14,959000 -03:00    6
RLM$EVTCLEANUP            SUCCEEDED  24/07/13 17:41:14,106000 -03:00    7
RLM$EVTCLEANUP            SUCCEEDED  24/07/13 19:20:49,353000 -03:00    8
RLM$EVTCLEANUP            SUCCEEDED  24/07/13 19:41:14,698000 -03:00    9
RLM$SCHDNEGACTION         SUCCEEDED  23/07/13 20:19:43,962000 -03:00    1
RLM$SCHDNEGACTION         SUCCEEDED  24/07/13 13:55:58,939000 -03:00    2
RLM$SCHDNEGACTION         SUCCEEDED  24/07/13 14:53:34,171000 -03:00    3
RLM$SCHDNEGACTION         SUCCEEDED  24/07/13 15:51:10,220000 -03:00    4
RLM$SCHDNEGACTION         SUCCEEDED  24/07/13 16:48:46,115000 -03:00    5
RLM$SCHDNEGACTION         SUCCEEDED  24/07/13 17:46:22,135000 -03:00    6
RLM$SCHDNEGACTION         SUCCEEDED  24/07/13 19:20:50,180000 -03:00    7

16 linhas selecionadas.

 => Taí, EXATAMENTE o que queríamos : o RANK indica que vc vai ter uma 
classificação dentro de um contador, o PARTITION BY JOB_NAME indica que o 
contador vai ser em cima da coluna JOB_NAME (ier, assim que mudar o JOB_NAME o 
contador é zerado, voltando a 1 no próximo JOB_NAME), e dentro de cada JOB_NAME 
as linhas devem ser ordenadas por LOG_DATE, é o que o ORDER BY faz, e essa 
"coluna" com o ranking, com a classificação da linha dentro de cada JOB_NAME eu 
chamei de NUM_DA_EXEC.... 
 Agora é babinha , para ter apenas as 5 primeiras linhas dentro de cada 
JOB_NAME é só pedir NUM_DA_EXEC < 6 , olha aí :
 
SYSTEM@o10gr2:SQL>select * from
 (
 SELECT
       JOB_NAME,
       STATUS,
       LOG_DATE,
       RANK() OVER(PARTITION BY JOB_NAME ORDER BY LOG_DATE) NUM_DA_EXEC
  FROM  DBA_SCHEDULER_JOB_RUN_DETAILS WHERE OWNER='EXFSYS'
 )
  where NUM_DA_EXEC < 6;

JOB_NAME                  STATUS      LOG_DATE                          
NUM_DA_EXEC
------------------------- ----------- --------------------------------- 
-----------
RLM$EVTCLEANUP            SUCCEEDED   23/07/13 20:19:43,712000 -03:00     1
RLM$EVTCLEANUP            SUCCEEDED   23/07/13 20:41:15,008000 -03:00     2
RLM$EVTCLEANUP            SUCCEEDED   24/07/13 13:55:58,362000 -03:00     3
RLM$EVTCLEANUP            SUCCEEDED   24/07/13 14:41:14,720000 -03:00     4
RLM$EVTCLEANUP            SUCCEEDED   24/07/13 15:41:14,803000 -03:00     5
RLM$SCHDNEGACTION         SUCCEEDED   23/07/13 20:19:43,962000 -03:00     1
RLM$SCHDNEGACTION         SUCCEEDED   24/07/13 13:55:58,939000 -03:00     2
RLM$SCHDNEGACTION         SUCCEEDED   24/07/13 14:53:34,171000 -03:00     3
RLM$SCHDNEGACTION         SUCCEEDED   24/07/13 15:51:10,220000 -03:00     4
RLM$SCHDNEGACTION         SUCCEEDED   24/07/13 16:48:46,115000 -03:00     5

10 linhas selecionadas.

E veja que eu POSSO SIM pedir num WHERE uma coluna que não é exibida, então se 
quiser eu Poderia Sim ao invés de exibir tudo optar por Não Exibir a coluna de 
classificação , veja :

SYSTEM@o10gr2:SQL>select JOB_NAME, STATUS, LOG_DATE from
 (
 SELECT
       JOB_NAME,
       STATUS,
       LOG_DATE,
       RANK() OVER(PARTITION BY JOB_NAME ORDER BY LOG_DATE) NUM_DA_EXEC
  FROM  DBA_SCHEDULER_JOB_RUN_DETAILS WHERE OWNER='EXFSYS'
 )
  where NUM_DA_EXEC < 6;

JOB_NAME                  STATUS      LOG_DATE
------------------------- ----------- ---------------------------------
RLM$EVTCLEANUP            SUCCEEDED   23/07/13 20:19:43,712000 -03:00
RLM$EVTCLEANUP            SUCCEEDED   23/07/13 20:41:15,008000 -03:00
RLM$EVTCLEANUP            SUCCEEDED   24/07/13 13:55:58,362000 -03:00
RLM$EVTCLEANUP            SUCCEEDED   24/07/13 14:41:14,720000 -03:00
RLM$EVTCLEANUP            SUCCEEDED   24/07/13 15:41:14,803000 -03:00
RLM$SCHDNEGACTION         SUCCEEDED   23/07/13 20:19:43,962000 -03:00
RLM$SCHDNEGACTION         SUCCEEDED   24/07/13 13:55:58,939000 -03:00
RLM$SCHDNEGACTION         SUCCEEDED   24/07/13 14:53:34,171000 -03:00
RLM$SCHDNEGACTION         SUCCEEDED   24/07/13 15:51:10,220000 -03:00
RLM$SCHDNEGACTION         SUCCEEDED   24/07/13 16:48:46,115000 -03:00

10 linhas selecionadas.

 valews ?? Espero que esta abordagem passo-a-passo, mostrando as diferentes 
"fases" da escrita de um SQl, tenha te sido útil, e que vc passe a contar com 
uma ferramentinha a mais na sua caixa de ferramentas de programação...
 
 []s
 
   Chiappa

--- Em oracle_br@yahoogrupos.com.br, Rafael Mendonca <raffaell.ti77@...> 
escreveu
>
> SELECT to_char(log_date, 'DD-MON-YY HH24:MI:SS') TIMESTAMP, job_name, status,
>        SUBSTR(additional_info, 1, 300) ADDITIONAL_INFO
>   FROM dba_scheduler_job_run_details 
>  where owner = 'XUXA'
>  ORDER BY log_date desc;
>  
>  
> Pessoal, eu queria que essa consulta me retornasse as últimas 5 execuções por 
> nome do JOB. Com essa consulta ele me mostra tudo.
> Alguém poderia ajudar?
> 
> [As partes desta mensagem que não continham texto foram removidas]
>


Responder a