如何从数据库中提取上个月的动态表

时间:2019-07-09 09:58:27

标签: sql oracle plsql datatable

在一个数据库中,存在12个不同的动态表。

arch_tbl_jan
arch_tbl_feb
arch_tbl_mar
arch_tbl_apr
arch_tbl_may
arch_tbl_jun
arch_tbl_jul
arch_tbl_aug
arch_tbl_sep
arch_tbl_oct
arch_tbl_nov
arch_tbl_dec

这12个动态表存在于架构下的一个数据库中。我想按月提取SELECT语句。对于 APRIL 月的前一个月,我想提取 JUNE 想要的表的 MARCH 月( arch_tbl_mar )提取表的 MAY 月( arch_tbl_may )。如何按月提取这些动态表。 选择语句,例如-

select id, name from arch_tbl_jan;   --(In Feb month)

2 个答案:

答案 0 :(得分:2)

如果您使用的是Oracle 12c及更高版本,请对动态游标使用DBMS_SQL.RETURN_RESULT。使用ADD_MONTHS, SYSDATETO_CHAR根据运行日期自动分配表名。

declare
   x SYS_REFCURSOR;
   l_table_name varchar2(40) := 'arch_tbl_' 
                                 || TO_CHAR( add_months(sysdate,-1),'fmMON');
BEGIN
     OPEN x FOR 'SELECT * FROM ' || l_table_name;
     DBMS_SQL.RETURN_RESULT(x);
END;
/  

对于11g,可以通过传递查询而不是RETURN_RESULT来使用DBMS_SQL来实现ref cursor。 这是一个示例:DEMO

答案 1 :(得分:0)

select max(animal_id) from modeling.pl_example_dictionary;