1

如果这已在其他地方得到回答,我深表歉意(该主题必须有一些内容),但我似乎无法找到我的问题的简明答案。

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

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

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

只有不到 3,000 个表同时包含oprid(用户标识符)和run_cntl_id(“运行控制”的类型)字段(当它们分开时,有 3,100 个表包含该run_cntl_id字段,8,800 个包含该oprid字段)。数据库中有大约 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 次?

4

1 回答 1

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 来构建该内联视图。

于 2013-09-09T18:28:40.237 回答