在一个数据库中,存在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)
答案 0 :(得分:2)
如果您使用的是Oracle 12c及更高版本,请对动态游标使用DBMS_SQL.RETURN_RESULT
。使用ADD_MONTHS, SYSDATE
和TO_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;