Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Оценка размера(число строк) таблиц  [new]
qulinxao
Member

Откуда:
Сообщений: 12
как sql или блоком пл или какнибудь? :

есть таблица A со списком имён таблиц (поле table_name)
нужно получить таблицу из двух полей tbl_name, records содержащие
A.table_name , select count(*) from A.table_name


т.е что то вроде
for i in (select table_name from A) loop
__ j:=select count(*) as lines from tblname.table_name
__ writeline(i.table_name||j.lines)
end loop;
30 сен 10, 11:13    [9528055]     Ответить | Цитировать Сообщить модератору
 Re: Оценка размера(число строк) таблиц  [new]
-2-
Member

Откуда:
Сообщений: 15330
qulinxao,

execute immediate
30 сен 10, 11:14    [9528076]     Ответить | Цитировать Сообщить модератору
 Re: Оценка размера(число строк) таблиц  [new]
SQLap
Member [заблокирован]

Откуда:
Сообщений: 34063
qulinxao,

самый простой способ - соединить с DBA_TABLES (поле NUM_ROWS)
(должна быть собрана статистика)
30 сен 10, 11:17    [9528105]     Ответить | Цитировать Сообщить модератору
 Re: Оценка размера(число строк) таблиц  [new]
Добрый Э - Эх
Guest
select table_name,
       extractvalue
         (dbms_xmlgen.getxmltype
           ('select count(1) cnt FROM '||owner||'.'||table_name)
           , '/ROWSET/ROW/CNT'
         ) num_rows
  from all_tables
 where owner = :owner
 order by to_number(cnt) desc
30 сен 10, 11:17    [9528108]     Ответить | Цитировать Сообщить модератору
 Re: Оценка размера(число строк) таблиц  [new]
qulinxao
Member

Откуда:
Сообщений: 12
Добрый Э - Эх,

спасибо. очень точно.
30 сен 10, 13:56    [9529874]     Ответить | Цитировать Сообщить модератору
 Re: Оценка размера(число строк) таблиц  [new]
qulinxao
Member

Откуда:
Сообщений: 12
-2-,

declare
c integer;
begin
for i in (select t.table_name as tbl from table_with_table_names t) loop
execute immediate 'select count(*) from ' ||i.tbl into c ; --при добавлении этой строки перестаёт компилировать
dbms_output.put_line(i.tbl|| c);
end loop;
null;
end;
30 сен 10, 13:58    [9529890]     Ответить | Цитировать Сообщить модератору
 Re: Оценка размера(число строк) таблиц  [new]
Добрый Э - Эх
Guest
Вот так попробуй:

declare
  c integer;
begin
  for i in 
    (
      select 'select count(1) from '||t.table_name as sql_text, table_name tbl 
        from table_with_table_names t 
    ) loop
    execute immediate i.sql_text into c ; --при добавлении этой строки перестаёт компилировать
    dbms_output.put_line(i.tbl|| c);
  end loop;
  null;
end;
30 сен 10, 14:06    [9529979]     Ответить | Цитировать Сообщить модератору
 Re: Оценка размера(число строк) таблиц  [new]
-2-
Member

Откуда:
Сообщений: 15330
qulinxao
execute immediate 'select count(*) from ' ||i.tbl into c ; --при добавлении этой строки перестаёт компилировать
Кто?
30 сен 10, 14:33    [9530293]     Ответить | Цитировать Сообщить модератору
 Re: Оценка размера(число строк) таблиц  [new]
qulinxao
Member

Откуда:
Сообщений: 12
-2-
Кто?


выскакивает окно ошибка(с красным крестиком)
ora-00942: table or view does not exist
ora-06512: at line 5

сырец в окне sql-window в pl/sql developer
30 сен 10, 14:39    [9530379]     Ответить | Цитировать Сообщить модератору
 Re: Оценка размера(число строк) таблиц  [new]
-2-
Member

Откуда:
Сообщений: 15330
qulinxao
ora-00942: table or view does not exist
вероятно, регистр
30 сен 10, 14:47    [9530483]     Ответить | Цитировать Сообщить модератору
 Re: Оценка размера(число строк) таблиц  [new]
qulinxao
Member

Откуда:
Сообщений: 12
-2-,

спасибо за execute immediate .

вышепревидёная строка заработала - оказалось нужно было имя схемы после фром.
30 сен 10, 14:56    [9530610]     Ответить | Цитировать Сообщить модератору
 Re: Оценка размера(число строк) таблиц  [new]
qulinxao
Member

Откуда:
Сообщений: 12
Добрый Э - Эх,

клёво
теперь 2 в догонку.
1. некоторые имена_таблиц именуют уже удалённые таблицы и поэтому на execute immediate -ошибка выскакивает - может как то обработкой эксепшенов можно продолжить?
2. как вместо put_line формировать "временую"? таблицу . т.е вот этот анонимный блок чтобы мона было как подзапрос или табличную функцию? (если такое можно)
30 сен 10, 15:04    [9530745]     Ответить | Цитировать Сообщить модератору
 Re: Оценка размера(число строк) таблиц  [new]
Добрый Э - Эх
Guest
1) Выбирать из мета-таблицы только те строки, которые ссылаются на существующие таблицы.
Существование таблицы проверять по [dba | all | user]_tables посредством IN/EXISTS подзапроса, JOIN-а, и т.д. и т.п по твоему вкусу и на твое усмотрение
30 сен 10, 15:31    [9531066]     Ответить | Цитировать Сообщить модератору
 Re: Оценка размера(число строк) таблиц  [new]
Добрый Э - Эх
Guest
qulinxao
2. как вместо put_line формировать "временую"? таблицу . т.е вот этот анонимный блок чтобы мона было как подзапрос или табличную функцию? (если такое можно)
А почему именно анонимный блок заинтересовал? Чем запрос с XML не угодил? Его можно и в подзапрос запихнуть и реализовать проверку на существование/отсутствие таблицы...
30 сен 10, 15:34    [9531101]     Ответить | Цитировать Сообщить модератору
 Re: Оценка размера(число строк) таблиц  [new]
qulinxao
Member

Откуда:
Сообщений: 12
Добрый Э - Эх

А почему именно анонимный блок заинтересовал?

1.императивно
2. именованные перед использованием требуется создавать - и удалять когда наиграишся - очём не всегда помниш


Добрый Э - Эх

Чем запрос с XML не угодил?

0.(пункт что запрос всёж полезен и очень) запрос с xml пригодился и понравился так как дал результат который сразу обдумал
1. по началу просто не догнал логики работы и незнакомсто с пакетом dbms_xmlgen
после того как увидел похожий приём в анонимном блоке стало чуть яснее
2. законченность - т.е не понятно как доходить до способности писать такое .

Добрый Э - Эх

Его можно и в подзапрос запихнуть и реализовать проверку на существование/отсутствие таблицы...

да именно похожее хочется от
qulinxao
т.е вот этот анонимный блок чтобы мона было как подзапрос или табличную функцию? (если такое можно)

пока мне легче писать блоки(т.е пока я думаю число задач которые могу сделать при помощи блоков шире чем при помощи select'ов и во вторых что бы написать особо-правильный селект нужно много больше понимать ) а скорость исполнения пока не критична то и интересно уметь блоки использовать как подзапросы
30 сен 10, 17:10    [9532149]     Ответить | Цитировать Сообщить модератору
 Re: Оценка размера(число строк) таблиц  [new]
Добрый Э - Эх
Guest
Про анонимный блок...
Как вариант - создать GTT (global temporary table) с сессионным циклом жизни данных (on commit preserve rows), в анонимном pl/sql-блоке выполнять запрос по подсчету кол-ва строк в интересуемых таблицах, занося результат в GTT. По окончании работы pl/sql-блока дергать данные из GTT любыми необходимыми запросами...
30 сен 10, 17:28    [9532363]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить