2010-05-21 56 views
11

我需要知道在oracle中select中返回了多少條記錄。目前,我做兩個查詢:Oracle SQL Select中的行數?

SELECT COUNT(ITEM_ID) FROM MY_ITEMS; 

SELECT * FROM MY_ITEMS; 

我需要知道COUNT,但我討厭做兩個查詢。有沒有辦法:

SELECT * FROM MY_ITEMS 

然後找出有多少記錄在那裏?

回答

28

有沒有辦法做到:

SELECT * FROM MY_ITEMS 

,然後找出有多少記錄在那裏呢?

如果您希望它按照這個確切的順序,您可以獲取客戶端上的所有記錄並計算它們的數量(幾乎所有的客戶端庫都爲此提供了一個函數)。

你也可以這樣做:

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

,這將返回與每個記錄一起計數。

+0

如果您想在數據庫級別執行此操作,我同意第二個建議。你可以在這裏看到一個例子:http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/functions032.htm#i82697 – Intelekshual 2010-05-21 17:39:20

+0

+1,這是一個聰明的方法來做到這一點! :) – FrustratedWithFormsDesigner 2010-05-21 17:42:53

+0

非常感謝!我知道這是2年前發佈的,但它確實幫助了我! – Slim 2013-04-03 11:08:12

0

我只是不確定表的別名,我不記得在Oracle中是否需要'AS'。但這應該工作。

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

OP特別要求一種不需要兩個查詢的方法;將這兩個查詢合併爲一個,這仍然完成相同數量的額外不必要的工作,這不是一個好的答案,恕我直言。 – 2012-08-27 01:56:08

3

如果你在PL/SQL時,您可以使用SQL%ROWCOUNT僞變量獲得受上一SQL語句的行數。可以爲你節省一些努力。

+1

如何評估/得到這個變量值? – 2015-08-05 00:13:04

2

這應該是訣竅。

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