2015-11-16 3 views
1

Я пытаюсь выполнить запрос к базе данных oracle, чтобы определить количество записей в каждой таблице. Я наматывается результат следующего запроса к SQL файла:select count (*) from table_name возвращает ошибку

select 'select count(*) '||table_name||';' from dba_tables; 

Это создало SQL файл формата

select count(*) from Table_Name1; 
select count(*) from Table_Name2; 
etc 

Я тогда намотан вывод выполнения этого SQL-файл, однако он только вернулся отсчет для некоторых таблиц, для других таблиц он просто говорит:

«Эта таблица или представление не существует»

Как это может быть, если я только что заполнил этот список имен таблиц автоматически из базы данных?

Конечная цель этого упражнения - иметь файл с количеством всех полей в каждой таблице, а затем внести изменения в программу с использованием этой базы данных и снова запустить ту же операцию в новый файл и сравнить 2 так что я вижу, какие таблицы меняются, когда я вношу изменения в программу.

+0

Что касается вашего конца цель, а не ошибка, которую вы получаете, [@ a_horse_with_name's XML magic trick] (http://stackoverflow.com/a/10705088/266304) довольно изящна. –

+0

Столбец 'NUM_ROWS' в таблице' DBA_TABLES' содержит количество строк. Но сначала вам нужно собрать статистику. – Dmitry

+2

Видимо, не проблема, которую вы имели, но для кого-то еще, также может быть DBA_TABLES показывает все таблицы, независимо от того, имеете ли вы к ним доступ или нет. Таким образом, можно включить таблицу, которая будет ошибочной при попытке получить доступ. ALL_TABLES ограничивает результаты таблицами, которые вы имеете для просмотра. –

ответ

6

Вы забыли полностью квалифицировать имена:

select 'select count(*) '||owner||'.'||table_name||';' 
from dba_tables; 

В случае, если у вас есть таблицы, которые имеют нестандартные имена, вы должны бросить двойные кавычки там, а также:

select 'select count(*) "'||owner||'"."'||table_name||'";' 
from dba_tables; 
+0

фантастическое спасибо! это сработало! вы бы не узнали, как можно преодолеть ошибку «не ссылаться на таблицу переполнения таблицы с индексированной таблицей»? или я должен попросить об этом в новом вопросе? – JabbaWook

+1

@JabbaWook - другой вопрос действительно, но добавьте 'where iot_type! = 'IOT_OVERFLOW''. –

Смежные вопросы