oracle sql developer动态日期表名称

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

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

dzhpxtsq

dzhpxtsq1#

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

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'

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

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>

相关问题