Oracle SQL Select 中的行数?

Posted

技术标签:

【中文标题】Oracle SQL Select 中的行数?【英文标题】:Number of rows in Oracle SQL Select? 【发布时间】:2011-02-22 11:22:21 【问题描述】:

我需要知道在 oracle 中的选择中返回了多少条记录。目前,我做了两个查询:

SELECT COUNT(ITEM_ID) FROM MY_ITEMS;

SELECT * FROM MY_ITEMS;

我需要知道 COUNT,但我讨厌做两个查询。有没有办法:

SELECT * FROM MY_ITEMS 

然后找出里面有多少条记录?

【问题讨论】:

【参考方案1】:

有没有办法:

SELECT * FROM MY_ITEMS 

然后找出里面有多少条记录?

如果您希望它按照这个确切的顺序,您可以获取客户端上的所有记录并计算它们的数量(几乎所有客户端库都为此提供了功能)。

你也可以这样做:

SELECT  i.*, COUNT(*) OVER ()
FROM    my_items i

,它将与每条记录一起返回计数。

【讨论】:

如果你想在数据库级别这样做,我同意第二个建议。你可以在这里看到一个例子:download.oracle.com/docs/cd/B28359_01/server.111/b28286/… 性能方面我认为这应该是最好的解决方案。谢谢。 如果我需要将 where 子句放在 over() 中,例如 SELECT i.*, COUNT(*) OVER (where prod = 6) FROM my_items i @user1512999:请将其作为单独的问题发布。 Essa é uma das coisas mais lindas que eu já vi! Não sei porque a resposta não foi aceita!【参考方案2】:

如果您使用 PL/SQL,您可以使用 SQL%ROWCOUNT 伪变量来获取受最后一条 SQL 语句影响的行数。可能会为您节省一些精力。

【讨论】:

如何评估/获取这个变量值? 举个例子会很有帮助。【参考方案3】:

这应该可以解决问题。

WITH 
base AS
(
    SELECT *
    FROM MY_ITEMS
)
SELECT (SELECT COUNT(*) FROM base) kount,
       base.*
FROM base

【讨论】:

【参考方案4】:

我只是不确定表别名,我不记得在 Oracle 中它们是否需要“AS”。但这应该可行。

select mt.*, c.Cntr
    from MyTable mt
        , (select COUNT(*) as Cntr
               from MyTable
           ) c

【讨论】:

OP 专门要求一种不需要两次查询的方法;恕我直言,将这两个查询合二为一,仍然会做同样数量的额外不必要的工作,这不是一个很好的答案。

以上是关于Oracle SQL Select 中的行数?的主要内容,如果未能解决你的问题,请参考以下文章

SQL 计算表中的行数

为啥选择单个属性返回的行数少于选择 Oracle SQL 中的所有列

PL/SQL ORA-01422 SELECT INTO 错误,Oracle 匿名块(NOVA 环境)

oracle查看所有表及各表行数

如何在 Oracle PL/SQL 中处理“超过请求的行数”

Oracle创建一个自定义函数,返回emp表的行数,请问哪位大神知道啊?