我正在尝试加入 2 个表,主表将包含一个列,告诉我要加入哪个子表。我发现了这个问题,但我认为它不适用于 Oracle。
例子
- 表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 需要一段时间。我担心使用视图时的性能。此外,我必须记住每年修改视图以添加新的年份表。
在我以前工作过的所有系统中,所有数据总是在一个带有年份或日期列的表中。每年有单独的桌子让我发疯,因为它过于复杂了应该是一个非常简单的选择。除非我遗漏了一些东西,否则有没有一种相当直接的方法来实现这一点?
谢谢