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 中的行数?的主要内容,如果未能解决你的问题,请参考以下文章
为啥选择单个属性返回的行数少于选择 Oracle SQL 中的所有列
PL/SQL ORA-01422 SELECT INTO 错误,Oracle 匿名块(NOVA 环境)