sql - 来自具有变量的多个模式的联合表
问题描述
我有 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;
解决方案
您将需要动态 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;
/
干杯!!
推荐阅读
- haskell - 为什么是 floatRange、floatRadix 和 floatDigits 函数?
- python - sys.getsizeof(int) 返回 400 字节
- python - Scipy `fmin_cg` args 与我的函数 args 不匹配
- sql - SQL Max 函数未返回正确的最大值
- php - PHP的函数checkdnsrr()的优缺点
- c++ - 如何映射 Linux 系统线程 ID 和 std::thread::id?
- javascript - 在 JavaScript 中保留数组键
- ios - 数据较少时未在 UITableview 中调用 scrollViewDidEndDragging
- php - 通过使用分组条件使结果独一无二
- django - 如何在 django orm 上制作多重过滤器?