2016-10-25 88 views
0

我正在使用以下命令获取单个行输出,并且我的要求是将第一列作为DB NAME,后跟下面的选定列。我如何实现它?

select SESSION_KEY, INPUT_TYPE, STATUS, 
    to_char(START_TIME,'mm/dd/yy hh24:mi') start_time, 
    to_char(END_TIME,'mm/dd/yy hh24:mi') end_time, 
    TIME_TAKEN_DISPLAY 
from V$RMAN_BACKUP_JOB_DETAILS 
where INPUT_TYPE like '%DB%' 
and start_time = (select max(start_time) from V$RMAN_BACKUP_JOB_DETAILS); 

回答

1

您可以通过连接到v$database得到数据库的名称,例如:

select d.name, rbjd.session_key, rbjd.input_type, status, 
    to_char(rbjd.start_time,'mm/dd/yy hh24:mi') start_time, 
    to_char(rbjd.end_time,'mm/dd/yy hh24:mi') end_time, 
    rbjd.time_taken_display 
from v$database d 
cross join v$rman_backup_job_details rbjd 
where rbjd.input_type like '%DB%' 
and rbjd.start_time = (select max(start_time) from v$rman_backup_job_details); 

或者使用子查询,如果你不喜欢的交叉连接,但我不是一个大风扇子选择列表中的子查询。还有其他方法可以获得最新的行。

0

这也可以使用,因为总是V $ RMAN_BACKUP_JOB_DETAILS输出将是单行(根据上面给出的查询)。

select name,SESSION_KEY, INPUT_TYPE, STATUS, 
    to_char(START_TIME,'mm/dd/yy hh24:mi') start_time, 
    to_char(END_TIME,'mm/dd/yy hh24:mi') end_time, 
    TIME_TAKEN_DISPLAY 
from V$RMAN_BACKUP_JOB_DETAILS,v$database 
where INPUT_TYPE like '%DB%' 
and start_time = (select max(start_time) from V$RMAN_BACKUP_JOB_DETAILS)