Как я могу зациклить, чтобы получить счет от нескольких таблиц? - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь получить таблицу с количеством из нескольких таблиц.Таблицы не на моей схеме.Имена таблиц в схеме, которая меня интересует, начинаются с 'STAF_' и заканчиваются '_TS'.Критерии, которые я ищу, это где SEP = «МО».Так, например, запрос в его базовой форме:

select area, count(SEP) areacount
from mous.STAF_0001_TS
where SEP = 'MO'
group by area;

У меня есть около 1000 таблиц, для которых я хотел бы сделать это.

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

 area| areacount
 0001|  3
 0002|  7
 0003|  438

Спасибо.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

В Oracle 12c вы можете встроить FUNCTION, который будет запрашивать количество строк в любой заданной таблице.Затем вы можете использовать эту функцию в вашем основном запросе.Вот пример:

WITH FUNCTION cnt ( p_owner VARCHAR2, p_table_name VARCHAR2 ) RETURN NUMBER IS
  l_cnt NUMBER;
BEGIN
  EXECUTE IMMEDIATE 'SELECT count(*) INTO :cnt FROM ' || p_owner || '.' || p_table_name INTO l_cnt;
  RETURN l_cnt;
EXCEPTION WHEN OTHERS THEN 
  RETURN NULL;  -- This will happen for entries in ALL_TABLES that are not directly accessible (e.g., IOT overflow tables)
END cnt;
SELECT t.owner, t.table_name, cnt(t.owner, t.table_name)
FROM all_tables t
where t.table_Name like 'STAF\_%\_MS' escape '\';
0 голосов
/ 06 февраля 2019

В качестве первого шага я бы написал запрос SQL, который генерирует запрос SQL:

SELECT 'SELECT area, count(*) FROM '||c.table_name||'UNION ALL' as run_me
FROM all_tables c
WHERE c.table_name LIKE 'STAF\_%\_MS' escape '\'

Выполнение этого приведет к выводу, являющемуся другим запросом SQL.Скопируйте текст результата из таблицы результатов и вставьте его обратно в панель запросов.Удалите окончательный вариант UNION ALL и запустите его

Как только вы поймете, как написать запрос SQL, который генерирует запрос SQL, вы можете посмотреть, как превратить его в представление или создать динамический запрос в строке.

Должен сказать, это ужасный способ хранения данных;вам лучше использовать ОДНУ таблицу с дополнительным столбцом, содержащим все, что находится в xxx STAF_xxx_MS прямо сейчас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...