2015-04-17 37 views
-1

我一直在尝试检索一些每日生成的数据,但我无法弄清楚如何在FROM子句(Oracle数据库)中动态设置日常创建的表名称, 。每天都会生成一个新表格,其中包含日期戳记作为表格名称的一部分。这将用于必须始终从当天表格中取出的每日定期报告(即今天的表格名称=“STATDB01.A150417001_AINF”,其中“150417”是当前日期)。我怎样才能从新的日常表中检索数据,而不必每天更新我的查询?从动态生成的PL/SQL表中检索数据

我可以在SELECT语句中动态创建新的表格鬃毛,但我无法让它在FROM语句中工作。

这里是我的查询:

SELECT 
    sta.statist “Stats” 
    ,sta.indept “Department” 
    ,sta.ondate “Date” 
    ,sta.skitem “SKU” 
    --< I can get this to work in the SELECT clause >-- 
    ,'STATDB01.A'||TO_CHAR(SYSDATE, 'YYMMDD')||'001_AINF' “New Table” 

FROM 
    --< Calling the table directly works fine >-- 
    --STATDB01.A150417001_AINF sta 
    --< but this does not work in the FROM clause >-- 
    'STATDB01.A'||TO_CHAR(SYSDATE, 'YYMMDD')||'001_AINF' 

WHERE 
    sta.run_stat LIKE '%341%' 

ORDER BY 
    sta.elap_time 
; 
+0

你对数据做了什么呢?当您选择数据时,它会转到哪里? – nop77svk

+0

输出作为每日通过电子邮件发送的报告发送到通讯组列表。 – s1xstr1ng

+0

考虑在表上使用分区。我不认为这张表包含数百万行,当你能够通过邮件发送出去时 –

回答

1

你可以写(的某些部分)你在PL/SQL报告,构建查询(包括当天的表名)到字符串变量,并运行查询字符串为EXECUTE IMMEDIATE

或者,您可以编写一个shell脚本并使其输出带有当天表名称的查询,并将该查询输入到sqlplus中(如果需要,然后输入文件)。

编辑:根据要求,EXECUTE IMMEDIATEexample在行动。

+0

你能举个例子吗? – s1xstr1ng

+1

我添加了一个例子。你已经证明你有你需要的其他部分 - 你知道如何连接sql中的字符串,你知道如何生成动态文件名。如果您需要或想要转到shell脚本路由,我需要知道您要使用的平台和shell。 –