Если вы можете жить с оценочным числом строк (точность которого зависит от актуальности статистики каждой таблицы), вы можете просто использовать столбец NUM_ROWS
из ALL_TABLES
:
SELECT
t.OWNER AS TABLE_SCHEMA,
t.Table_Name,
c.COLUMN_NAME,
c.DATA_TYPE,
t.NUM_ROWS, --> here
...
FROM all_tables t
INNER JOIN all_tab_columns c ...
Обратите внимание, что DISTINCT
здесь кажется излишним - ваш запрос генерирует одну запись на столбец таблицы.
Если вам действительно нужен точный счет, то вы можете использовать встроенный запрос - но вам нужно жестко закодировать имя таблицы:
SELECT
t.OWNER AS TABLE_SCHEMA,
t.Table_Name,
c.COLUMN_NAME,
c.DATA_TYPE,
(SELECT COUNT(*) FROM my_schema_name.my_table_name) no_rows,
...
FROM all_tables t
INNER JOIN all_tab_columns c ...
WHERE t.OWNER = 'MY_SCHEMA_NAME' AND t.Table_Name = 'MY_TABLE_NAME'