2010-05-21 4 views
11

Мне нужно знать, сколько записей было возвращено при выборе в oracle. В настоящее время я делаю два запроса:Количество строк в Oracle SQL Select?

SELECT COUNT(ITEM_ID) FROM MY_ITEMS; 

SELECT * FROM MY_ITEMS; 

Мне нужно знать COUNT, но я ненавижу делать два запроса. Есть ли способ:

а затем узнать, сколько записей там?

ответ

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

+0

+1, Это умный способ сделать это! :) – FrustratedWithFormsDesigner

+0

ОГРОМНОЕ спасибо !!! Я знаю, что это было опубликовано 2 года назад, но это действительно помогло мне! – Slim

0

Я просто не уверен в табличных псевдонимах, я не помню в Oracle, если они требуют «AS» или нет. Но это должно сработать.

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

OP специально запросил метод, который не требовал бы двух запросов; munging два вопроса в один, который по-прежнему делает ровно столько же лишней ненужной работы, не является отличным ответом, ИМХО. –

3

Если вы работаете в PL/SQL, вы можете использовать SQL% ROWCOUNT псевдо-переменной, чтобы получить количество строк, затронутых в последнем заявлении SQL. Мог бы сэкономить вам немного усилий.

+1

Как оценить/получить эту переменную? –

2

Это должно сделать трюк.

WITH 
base AS 
(
    SELECT * 
    FROM MY_ITEMS 
) 
SELECT (SELECT COUNT(*) FROM base) kount, 
     base.* 
FROM base 
Смежные вопросы