【问题标题】:How do I get the next-to-last register for a select statement?如何获取 select 语句的倒数第二个寄存器?
【发布时间】:2020-03-28 16:39:59
【问题描述】:

环境

带有 OracleXE11g 的虚拟机(我使用的是SQL Plus

说明

我需要得到 1 个查询(并且没有 pl/SQL):

  • 在服务器中执行的最后一个 SQL 语句
  • 该语句自首次加载到共享池后执行的次数
  • 执行同一条语句所花费的 CPU 时间

总而言之,这是我想出来的查询

SELECT sq.SQL_TEXT ,sq.EXECUTIONS, sq.CPU_TIME
  FROM gv$sql sq;

当然,这个查询是有效的,但是它显示了所有的寄存器。我需要获取倒数第二个,因为最后一个在执行时将是同一个查询。

我正在努力实现的目标

如何获得该查询的倒数第二个寄存器?

【问题讨论】:

  • 对 11g 不是很熟悉,但是没有可以与窗口函数一起使用的日期字段吗?
  • 这是家庭作业吗?还是真正的问题?我很难想象这些信息对您有什么用处,因为您找到的 SQL 语句几乎肯定来自 Oracle 在后台运行的后台进程。
  • 它首先需要一个 ORDER BY,然后使用 OFFSET 子句研究 FETCH NEXT...
  • 你说得对,这是家庭作业,所以没必要在真实环境中实际使用。我们只是在了解用户、权限、角色...等@JustinCave
  • 我尝试了 fetch 语句,但不适用于 11g 版本。我发现它是在 12c 版本@DRapp 中首次引入的

标签: sql oracle select oracle11g sqlplus


【解决方案1】:

使用row_number()降序排列,取第二行:

select sql_text, executions, cpu_time 
  from (select sql_text, executions, cpu_time, 
               row_number() over (order by last_load_time desc) rn
          from gv$sql)
  where rn = 2;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 2023-03-03
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    相关资源
    最近更新 更多