oracle sql developer动态日期表名称

wtlkbnrh  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(391)

我希望在oracle sql developer的每周销售表中动态引用上周五的日期,即从sales\u ddmmyy中选择*
我可以在sql server中执行此操作( DECLARE / SET / EXECUTE )但我对sql开发者一点也不满意。
即使能够创建一个日期变量在代码中引用,也将是一个很好的开始。

dzhpxtsq

dzhpxtsq1#

住手!
我强烈建议你不要那样做。这不是创建数据模型的方法。如果您有一个包含与不同日期相关的值的表,那么date应该是该表中的一列,例如

  1. create table sales
  2. (id number,
  3. datum date,
  4. amount number
  5. );

插入行作为

  1. insert into sales (id, datum, amount)
  2. select 1, date '2020-06-01', 100 from dual union all
  3. select 2, date '2020-05-13', 240 from dual union all
  4. select 3, date '2020-05-13', 160 from dual;

把它当作

  1. select sum(amount)
  2. from sales
  3. where datum = date '2020-05-13'

这就是办法。按日期命名列是。。。好吧,差点自杀。
啊哈,现在我明白了:这是一个包含日期的表名。没关系,我的建议仍然有效。不要那样做。在单个表中使用日期列。
如果你想-如果你负担得起-分区表的日期值。注意,oracleenterpriseedition中存在分区选项,这非常昂贵。所以是日期栏。
如果对此你无能为力,那么动态sql就是了。例如:
样品表:

  1. SQL> create table sales_200620 as select * From dept;
  2. Table created.

接受的函数 ddmmyy 值作为参数,组成表名并返回refcursor:

  1. SQL> create or replace function f_test (par_ddmmyy in varchar2)
  2. 2 return sys_refcursor
  3. 3 is
  4. 4 l_table_name varchar2(30) := 'sales_' || par_ddmmyy;
  5. 5 l_rc sys_refcursor;
  6. 6 begin
  7. 7 open l_rc for 'select * from ' || dbms_assert.sql_object_name(l_table_name);
  8. 8 return l_rc;
  9. 9 end;
  10. 10 /
  11. Function created.

测试:

  1. SQL> select f_test('200620') from dual;
  2. F_TEST('200620')
  3. --------------------
  4. CURSOR STATEMENT : 1
  5. CURSOR STATEMENT : 1
  6. DEPTNO DNAME LOC
  7. ---------- -------------- -------------
  8. 10 ACCOUNTING NEW YORK
  9. 20 RESEARCH DALLAS
  10. 30 SALES CHICAGO
  11. 40 OPERATIONS BOSTON
  12. SQL>

不创建函数:使用替换变量:

  1. SQL> select * From &tn;
  2. Enter value for tn: sales_200620
  3. DEPTNO DNAME LOC
  4. ---------- -------------- -------------
  5. 10 ACCOUNTING NEW YORK
  6. 20 RESEARCH DALLAS
  7. 30 SALES CHICAGO
  8. 40 OPERATIONS BOSTON
  9. SQL>
展开查看全部

相关问题