Oracle / SQL - Использование результатов запроса в качестве параметров в другом запросе? - PullRequest
1 голос
/ 07 апреля 2011

Привет всем, что мне интересно, если я могу сделать, это создать таблицу, которая перечисляет количество записей других таблиц.Это будет получать эти имена таблиц из таблицы.Итак, давайте предположим, что у меня есть таблица TABLE_LIST, которая выглядит так

name                numRecords
------------------------------
sports_products     10
house_products      8
beauty_products     15

Так что я думаю, что мне нужно сделать что-то вроде этого псевдокода

select *
from    foreach tableName in select name from table_list
            select count(*) as numRecords
            from tableName
        loop

Ответы [ 3 ]

2 голосов
/ 07 апреля 2011

У вас может быть функция, которая делает это для вас через динамический sql.

Однако, не забудьте объявить ее как authid current_user.Вы не хотите, чтобы кто-либо получал какое-то повышение привилегий, используя вашу функцию.

create or replace function SampleFunction
(
  owner     in VarChar
 ,tableName in VarChar
) return integer authid current_user is
  result Integer;
begin
  execute immediate 'select count(*) from "' || owner || '"."' || tableName || '"'
    INTO result;

  return result;
end;
1 голос
/ 07 апреля 2011

Я думаю, что решение Роберта Гизеке будет работать нормально.

Более экзотическим способом решения этой проблемы является использование dbms_xmlgen.getxml.

См. Например: Определить таблицу с максимальным количеством строк в Oracle

1 голос
/ 07 апреля 2011

Один из вариантов - просто обновлять статистику вашей БД, использовать пакет dbms_stats или EM, а затем

select num_rows
  from all_tables
 where table_name in (select name from table_list);
...