1

我正在尝试加入 2 个表,主表将包含一个列,告诉我要加入哪个子表。我发现了这个问题,但我认为它不适用于 Oracle。

表名和列名存储在另一个表中时如何使用JOIN?

例子

  • 表A(年份:Int,批次:Int,作业:Int)
  • 表 B13(批次:int,数量:int)
  • 表 B12(批次:整数,数量:整数)
  • ETC...

所以我们有很多年份表,我需要使用TableA中的年份来选择合适的相关表。根据我的研究,我得出的结论是,使用本机动态 Sql 是可能的,但是我还没有设法让它工作。

这是我需要做的

Select tA.batch, tB.amount  from tableA ta, tableB'tA.year' tB
WHERE tA.batch = '1234'

显然这不起作用,但它显示了我想要的。我尝试了类似下面的东西,

create or replace procedure QUERY_INVOICE (
         i_batch in varchar2,
         i_year in varchar2,
         o_cursor out sys_refcursor)

 as
 begin
    open o_cursor for
     'select amount from tableB' || i_year || ' where batch = ' || i_batch;
 end;
 / 
variable rc refcursor;
exec system.query_invoice('52786','12', :rc);
print rc;

尽管从正确的表中打印出正确的记录,但我仍然需要知道如何在 Year 和 Batch 来自 tableA 而不是硬编码的情况下进行这项工作。

select * from TableA, query_invoice(tableA.batch, tableA.year)

我还考虑过创建一个视图,并在所有表上使用 UNION。大约有 20 年的表,创建 UNION 需要一段时间。我担心使用视图时的性能。此外,我必须记住每年修改视图以添加新的年份表。

在我以前工作过的所有系统中,所有数据总是在一个带有年份或日期列的表中。每年有单独的桌子让我发疯,因为它过于复杂了应该是一个非常简单的选择。除非我遗漏了一些东西,否则有没有一种相当直接的方法来实现这一点?

谢谢

4

0 回答 0