Оператор SELECT, чтобы получить все столбцы из разных таблиц - PullRequest
0 голосов
/ 02 октября 2018

У меня есть несколько таблиц, которые начинаются с "PLAYERS_", и они состоят из некоторых данных, которые я пытаюсь получить сразу.В будущем я могу добавить больше таблиц, которые начинаются с «PLAYER_», поэтому я хочу иметь оператор select, который получит все данные этих таблиц, а я не буду выбирать из всех этих таблиц.

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

SELECT * FROM (SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME LIKE 'PLAYER_%';

Все, что это делает, дает мне результаты подзапроса, который представляет собой таблицы 'информация (не то, что мне нужно).Есть ли альтернативный способ достичь того, чего я пытаюсь достичь?

То, чего я пытаюсь достичь, это то же самое, что и:

SELECT * FROM PLAYER_1, PLAYER_2, PLAYER_3; 

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

1 Ответ

0 голосов
/ 02 октября 2018

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

Предполагая, что вы выбираете только общие столбцы из всех таблиц, вы можете создать динамическое представление, которое выполняет UNION ALL всех существующих таблиц игроков.

DECLARE
     v_select   CLOB;
BEGIN
     SELECT
          LISTAGG('SELECT col1,col2,col3 FROM ' || table_name,' UNION ALL ' || CHR(10) ) WITHIN GROUP
          (
               ORDER BY table_name
          )
     INTO v_select
     FROM user_tables WHERE table_name LIKE 'PLAYER_%';
     IF
          v_select IS NOT NULL
     THEN
          EXECUTE IMMEDIATE ' CREATE OR REPLACE VIEW v_player_all as ' || v_select;
     END IF;
END;
/

Затем выберите из представления, выполняя блок (или помещая его в процедуру) каждый раз, когда добавляется новая таблица.

select * from v_player_all;

Вы также можете присоединиться с помощью user_tab_columns кдинамически выбирать только общие столбцы.

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