我希望在oracle sql developer的每周销售表中动态引用上周五的日期,即从sales\u ddmmyy中选择*我可以在sql server中执行此操作( DECLARE / SET / EXECUTE )但我对sql开发者一点也不满意。即使能够创建一个日期变量在代码中引用,也将是一个很好的开始。
DECLARE
SET
EXECUTE
dzhpxtsq1#
住手!我强烈建议你不要那样做。这不是创建数据模型的方法。如果您有一个包含与不同日期相关的值的表,那么date应该是该表中的一列,例如
create table sales (id number, datum date, amount number );
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;
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 saleswhere datum = date '2020-05-13'
select sum(amount)
from sales
where datum = date '2020-05-13'
这就是办法。按日期命名列是。。。好吧,差点自杀。啊哈,现在我明白了:这是一个包含日期的表名。没关系,我的建议仍然有效。不要那样做。在单个表中使用日期列。如果你想-如果你负担得起-分区表的日期值。注意,oracleenterpriseedition中存在分区选项,这非常昂贵。所以是日期栏。如果对此你无能为力,那么动态sql就是了。例如:样品表:
SQL> create table sales_200620 as select * From dept;Table created.
SQL> create table sales_200620 as select * From dept;
Table created.
接受的函数 ddmmyy 值作为参数,组成表名并返回refcursor:
ddmmyy
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> 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 : 1CURSOR STATEMENT : 1 DEPTNO DNAME LOC---------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTONSQL>
SQL> select f_test('200620') from dual;
F_TEST('200620')
--------------------
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 BOSTONSQL>
SQL> select * From &tn;
Enter value for tn: sales_200620
1条答案
按热度按时间dzhpxtsq1#
住手!
我强烈建议你不要那样做。这不是创建数据模型的方法。如果您有一个包含与不同日期相关的值的表,那么date应该是该表中的一列,例如
插入行作为
把它当作
这就是办法。按日期命名列是。。。好吧,差点自杀。
啊哈,现在我明白了:这是一个包含日期的表名。没关系,我的建议仍然有效。不要那样做。在单个表中使用日期列。
如果你想-如果你负担得起-分区表的日期值。注意,oracleenterpriseedition中存在分区选项,这非常昂贵。所以是日期栏。
如果对此你无能为力,那么动态sql就是了。例如:
样品表:
接受的函数
ddmmyy
值作为参数,组成表名并返回refcursor:测试:
不创建函数:使用替换变量: