create table sales
(id number,
datum date,
amount number
);
插入行作为
insert into sales (id, datum, amount)
select 1, date '2020-06-01', 100 from dual union all
select 2, date '2020-05-13', 240 from dual union all
select 3, date '2020-05-13', 160 from dual;
把它当作
select sum(amount)
from sales
where datum = date '2020-05-13'
SQL> create table sales_200620 as select * From dept;
Table created.
接受的函数 ddmmyy 值作为参数,组成表名并返回refcursor:
SQL> create or replace function f_test (par_ddmmyy in varchar2)
2 return sys_refcursor
3 is
4 l_table_name varchar2(30) := 'sales_' || par_ddmmyy;
5 l_rc sys_refcursor;
6 begin
7 open l_rc for 'select * from ' || dbms_assert.sql_object_name(l_table_name);
8 return l_rc;
9 end;
10 /
Function created.
测试:
SQL> select f_test('200620') from dual;
F_TEST('200620')
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
不创建函数:使用替换变量:
SQL> select * From &tn;
Enter value for tn: sales_200620
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
1条答案
按热度按时间dzhpxtsq1#
住手!
我强烈建议你不要那样做。这不是创建数据模型的方法。如果您有一个包含与不同日期相关的值的表,那么date应该是该表中的一列,例如
插入行作为
把它当作
这就是办法。按日期命名列是。。。好吧,差点自杀。
啊哈,现在我明白了:这是一个包含日期的表名。没关系,我的建议仍然有效。不要那样做。在单个表中使用日期列。
如果你想-如果你负担得起-分区表的日期值。注意,oracleenterpriseedition中存在分区选项,这非常昂贵。所以是日期栏。
如果对此你无能为力,那么动态sql就是了。例如:
样品表:
接受的函数
ddmmyy
值作为参数,组成表名并返回refcursor:测试:
不创建函数:使用替换变量: