How to merge two or more unknown tables into one table in Oracle
我正在尝试将x个相同的表合并到一个表中。这样做的原因是因为我们希望数据库中的每个表具有50个列。通过名为Ignition的SCADA软件在外部创建表。
每个时间表都是在数据库中创建的,我们希望将数据视为一个表,而与数据来自多少表无关,只要所有表的前三个字母相同,例如Table_1,Table_2,Table_3。 ..等等。
我们想要的查询/过程如下:
步骤1:由于这些表是未知的,我们无法通过简单的并集,合并插入等操作来完成,因此我们必须找到所有带有'Table'前缀的table_name。
从所有表中选择table_name,其中table_name如'Table%'
第2步:这是魔术的起点,第一步,应该对列出的table_name逐个查询,然后收集所有数据并合并到一个表或视图中。
我尝试了使用PL / SQL的多种方法,但不知道如何执行步骤2。是否有任何方法可以获得我们想要实现的目标?任何可能的解决方案都将很棒! :)
谢谢!
假设您仅从所有表中选择公共列,则可以创建一个动态视图,该视图对所有以" Table "前缀开头的表进行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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 'TABLE_%'; IF v_select IS NOT NULL THEN EXECUTE IMMEDIATE ' CREATE OR REPLACE VIEW v_all_tabs as ' || v_select; END IF; END; / |
然后,每次添加新表时,通过执行上述块(或将其放入过程)从视图中进行选择。
1 | select * from v_all_tabs; |
如果您的SQL字符串有可能超过4000个字符,而不是单个