版本 < 12 的 Oracle 查询兼容性问题

rag*_*ria 1 sql oracle cx-oracle

我有下面提到的 Oracle SQL 查询。它对于版本 > 12 运行得很好。但是对于版本 < 12,它给出的错误是SQL command not properly ended(错误代码:ORA-00933)。

询问:

select
    LEAST(ROUND(SUM((BLOCKS*BLOCK_SIZE)/1024/1024/1024)),200) GB, 
    to_char(COMPLETION_TIME,'MM.DD.YYYY') COMPLETION_DATE 
from 
    v$archived_log 
where 
    trunc(COMPLETION_TIME,'DD') > sysdate - 30 
group by to_char(COMPLETION_TIME,'MM.DD.YYYY') 
order by SUM((BLOCKS*BLOCK_SIZE)/1024/1024/1024) DESC 
FETCH FIRST 1 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)

查询的作用:它获取过去 30 天的最大存档大小以及最大存档大小发生的日期。

我使用 cx_Oracle 通过 Python 运行此查询。

Der*_*ğlu 8

FETCH FIRST 1 ROWS ONLY 
Run Code Online (Sandbox Code Playgroud)

oracle 11g 及更早版本不支持。

你可以使用rownum方法

select * from
(
    select
        LEAST(ROUND(SUM((BLOCKS*BLOCK_SIZE)/1024/1024/1024)),200) GB, 
        to_char(COMPLETION_TIME,'MM.DD.YYYY') COMPLETION_DATE 
    from 
        v$archived_log 
    where 
        trunc(COMPLETION_TIME,'DD') > sysdate - 30 
    group by to_char(COMPLETION_TIME,'MM.DD.YYYY') 
    order by SUM((BLOCKS*BLOCK_SIZE)/1024/1024/1024) DESC 
) t
where rownum < 2
Run Code Online (Sandbox Code Playgroud)