Считая нет.записей из нескольких таблиц;БД Oracle - PullRequest
3 голосов
/ 15 июля 2011

Я знаю, что мне нужно использовать этот запрос, чтобы получить список таблиц для схемы: выберите table_name из all_tables, где owner = 'schema'

Я знаю, что следующий запрос подсчитывает запись в таблице: выберите количество (*) из schema.table

В этой схеме более 2400 таблиц. У меня вопрос, как подсчитать количество записей из всех таблиц, используя один шаг?

Ответы [ 2 ]

2 голосов
/ 15 июля 2011

Вы можете использовать функцию DBMS_XMLGEN.GETXMLTYPE, чтобы сделать это за один раз:

SQL> select table_name
  2       , to_number
  3         ( extractvalue
  4           ( dbms_xmlgen.getxmltype('select count(*) c from ' || table_name)
  5           , '/ROWSET/ROW/C'
  6           )
  7         ) cnt
  8    from user_tables
  9   order by table_name
 10  /        

TABLE_NAME                            CNT
------------------------------ ----------
... [output removed] ...

71 rows selected.

Но если ваша схема содержит много данных, это может занять много времени.Достаточно просто выбрать NUM_ROWS, если с оценками все в порядке.

С уважением,
Роб.

1 голос
/ 15 июля 2011

Таблица ALL_TABLES содержит столбец NUM_ROWS. (Вы можете получить описание таблицы с помощью следующего оператора SQL: DESCRIBE ALL_TABLES;)

Следующий оператор показывает количество записей для каждой таблицы:

SELECT TABLE_NAME, NUM_ROWS FROM ALL_TABLES WHERE OWNER='SCHEMA';

Чтобы получить количество записей во всех таблицах вашей схемы, используйте:

SELECT SUM(NUM_ROWS) FROM ALL_TABLES WHERE OWNER='SCHEMA';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...