2015-04-15 9 views
0

Может ли кто-нибудь сказать мне, как я могу получить количество строк в каждой таблице в моей базе данных оракула? Я нашел несколько запросов, но ни один из них не работал, потому что я использую oracle 7 и sql плюс 3.2, и в основном все, что я нашел, не работает на нем. Мне просто нужно что-то, что будет работать на sql плюс 3.2.Как получить количество строк в каждой таблице, имеющейся в моей базе данных оракула

Требуется:

ИмяТаблицы Ряды

Таблица 1 0

Таблица 2 5

...

Можно ли это сделать что-то вроде петли? Или что я должен делать?

+1

Почему вы все еще используете oracle 7? Есть ли что-то, что вас удерживает, чтобы перейти на нечто более современное. Oracle 7 - от '92 ... – philnate

+1

'SELECT table_name, num_rows from all_tables' - это статистика таблиц, с помощью которой движок db использует для определения оптимальных путей выполнения, они не 100%, но обычно достаточно близки. Также обратите внимание: all_tables ограничивается тем, что у вас есть для просмотра. Если у вас нет прав на таблицу, вы не сможете увидеть количество записей в таблице/записи в результатах. – xQbert

+0

Вот что я пытаюсь сделать. Я пытаюсь обновить с oracle 7 до 10g или 11g, но есть много вещей, которые мне нужно выяснить в базе данных, прежде чем я смогу обновиться, чтобы я не испортил вещи, поскольку это база данных компании. Мне просто нужно знать, какие таблицы бесполезны и что я могу отказаться. У них около 370 таблиц, и я уверен, что они используют только около 50 или около того таблиц, поэтому мне нужно отказаться от остальных, а затем я буду реагировать на новую базу данных самостоятельно. – kimoturbo

ответ

0

Простейшее решение будет использовать функцию count(). Что-то вроде

select 'table1' as table_name, 
count(*) as number_of_rows 
from table1 
+0

Думаю, он хочет знать счет по всем столам. – Drumbeg

+0

Да, это то, что я хочу – kimoturbo

1

если SELECT table_name, num_rows from all_tables не дает вам то, что вам нужно.

Вы можете использовать динамический SQL и считать как выбранный Rahul.

Выполните нижеследующее, чтобы получить результаты, которые динамически создают объединение на всех таблицах, а затем запускают результаты как собственный запрос для получения окончательных результатов.

SELECT 'SELECT ' ||t.name || ' as tName, count(*) as Row_Cnt 
     FROM ' || t.name || ' UNION ALL ' 
FROM ALL_TABLES t 

Просто не забудьте удалить последнюю инструкцию союза по последнему запросу.

Также обратите внимание: если у вас нет доступа к таблице, он не появится в этом списке!

--- Обновлено ------ Итак, если all_tables не существует, все это не будет работать. Поскольку у меня нет экземпляра oracle 7 handy ... вы могли бы увидеть, возвращает ли SELECT * FROM dictionary все, что может привести к списку всех таблиц? Если вы найдете объект вида или таблицы, используйте его вместо all_tables выше.

Теперь я читаю документы для oracle 7, но мало нахожусь для поиска. таким образом, метод угадывания и проверки может идти быстрее.

+0

Обратите внимание, что этот вопрос касается Oracle 7 (!). У Oracle 7 даже были статистические данные оптимизатора и столбец num_rows? –

+0

Я пробовал колонку num_rows, и она всегда давала мне нулевые ответы. Я попытался обновить его, используя DBMS_STATS, но он сказал, что DBM_STATA должен быть объявлен первым. Также я попробовал аналогичный запрос к тому, который вы написали, и он тоже не сработал. SQL PLUS Код: select 'select count (*) from' || владелец || '' || table_name || ';' от dba_tables где owner = 'xxxx' заказать по table_name; – kimoturbo

+0

Вы правы, это скорее ответ на> 7. Я еще не смог найти доказательства системных таблиц, существующих в 7. Имеет ли 7 словарь для отображения доступных системных объектов, которые вы могли бы запросить у 'Select * from dictionary, где table_name, например '% TABLE%''? – xQbert