Oracle SQL从大量表中选择

时间:2013-09-09 16:18:29

标签: sql oracle

如果在其他地方已经回答了这个问题我会道歉(这个主题必须有一些内容),但我似乎无法找到对我的问题的简明回答。

我对SQL比较陌生,当我使用它时,我只使用了基本语句。现在我正在使用一个非常大的数据库(在Oracle中),并被要求在开发方面进行一些探索,以便更熟悉。

发送给我探索数据库的一个问题涉及查找与特定用户关联的“运行控件”列表。

有一个表可以跟踪通过标题为run_cntl_id的字段存在的不同类型的“运行控件”。此表中有18行与特定用户相关联,每行都有唯一的run_cntl_id。对于run_cntl_id字段中的每个值,至少有一个具有多行的对应表(非常标准的数据库内容)。不幸的是,我没有任何参考资料来显示表格关系。

有不到3,000个表包含oprid(用户标识符)和run_cntl_id(“运行控制”类型)字段(当它们分开时,有3,100个表其中包含run_cntl_id字段,以及包含oprid字段的8,800字段。数据库中总共有大约65,000个表。有没有办法搜索这3,000个表格中的特定operidrun_cntl_id

如果我想在一个表上执行此查询,我将使用以下语句:

SELECT * 
FROM PS_JRNL_COPY_REQ
WHERE oprid = 'jle0010'
AND run_cntl_id = 'Copy_Jrnl';

重新解释这个问题:

有没有办法在上面提到的3,000个表上执行此语句而不运行单个语句3,000次?

1 个答案:

答案 0 :(得分:1)

如果所有3,000个表都具有相同的列,那么您的查询将如下所示:

SELECT * 
FROM   (
  select * from PS_JRNL_COPY_REQ union all
  select * from other_table_1    union all
  select * from other_table_2    union all
  ... and so on for 2,997 more)
WHERE oprid = 'jle0010'
AND run_cntl_id = 'Copy_Jrnl';

无法保证解析或运行。

您可以通过查询user_tables来构建该内联视图。