首页 > 解决方案 > 来自具有变量的多个模式的联合表

问题描述

我有 12 个模式:A1、B1、C1、A2、B2、C2、A3、B3、D3 等。

我需要帮助编写一个查询,该查询将使用循环从所有模式中联合同一个表。

IE:

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;

标签: sqloracle

解决方案


您将需要动态 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;
/

干杯!!


推荐阅读