oracle native动态sql加入另一个命名的tabled

时间:2013-09-17 23:22:19

标签: sql oracle

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

How to use JOIN when the table name and the column name is stored in another table?

实施例

  • TableA(Year:Int,batch:Int,Job:Int)
  • TableB13(batch:int,amount:int)
  • TableB12(batch:int,amout:int)
  • 等...

所以我们有很多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个表中。每年都有单独的表格让我疯狂,因为它使复杂的应该是一个非常简单的选择。除非我遗漏了某些东西,否则有一个相当直接的方法可以实现这个目标吗?

由于

0 个答案:

没有答案