我正在尝试加入2个表,主表将包含一个列,告诉我要加入哪个子表。 我发现了这个问题,但我认为它不适用于Oracle。
How to use JOIN when the table name and the column name is stored in another table?
实施例
所以我们有很多yeared表,我需要使用TableA中的年份来选择适当的相关表。 根据我的研究,我得出的结论是,使用Native动态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;
虽然从正确的表打印出正确的记录,但我仍然需要知道如何使这项工作在年份和批次来自tableA而不是硬编码。
select * from TableA, query_invoice(tableA.batch, tableA.year)
我还想过创建一个视图,并在所有表上使用UNION。有大约20年的表,创建UNION需要一段时间。当我使用视图时,我担心性能。此外,我必须记住每年修改视图以添加新年表。
在我过去使用过的所有系统中,所有数据始终位于包含年份或日期列的1个表中。每年都有单独的表格让我疯狂,因为它使复杂的应该是一个非常简单的选择。除非我遗漏了某些东西,否则有一个相当直接的方法可以实现这个目标吗?
由于