Таблица объединения из нескольких схем с переменной - PullRequest
0 голосов
/ 23 октября 2019

У меня 12 схем: A1, B1, C1, A2, B2, C2, A3, B3, D3 и т. Д.

Мне нужна помощь в написании запроса, который объединит одну и ту же таблицу из всех схем, используяпетля.

т.е.:

DECLARE vIndex Number;
BEGIN
   FOR vIndex IN 1..12 LOOP
       SELECT *
       FROM 'A' || &vIndex || '.Table'
       UNION ALL
       SELECT *
       FROM 'B' || &vIndex || '.Table'
       UNION ALL
       SELECT *
       FROM 'C' || &vIndex || '.Table'
   END LOOP;
END;

1 Ответ

0 голосов
/ 23 октября 2019

Вам понадобится динамический sql для этого. Также нет необходимости декларировать vIndex

Поможет что-то вроде следующего:

DECLARE 
  V_sql varchar2(4000);
  --TYPE V_ALL_REC_TYPE IS TABLE OF A1.TABLE%ROWTYPE; -- one of the table name from any schema 
  --V_ALL_REC V_ALL_REC_TYPE;
  Cur1 sys_refcursor;
BEGIN
   FOR vIndex IN 1..3 LOOP -- use range according to your need
     V_sql:= v_sql 
       || case when vIndex > 1 then ' UNION ALL ' END ||
       'SELECT *
       FROM A' || vIndex || '.Table
       UNION ALL
       SELECT *
       FROM B' || vIndex || '.Table
       UNION ALL
       SELECT *
       FROM C' || vIndex || '.Table ';
   END LOOP;

   --EXECUTE IMMEDIATE 'INSERT INTO YOUR_TABLE ' || V_sql; -- DIRECTLY INSERT DATA TO YOUR TABLE AS MENTIONED IN THE COMMENT.
 Open cur1 for v_sql;
 DBMS_SQL.RETURN_RESULT(cur1); -- use this
END;
/

Cheers !!

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