在 PL/SQL 中为查询的一部分声明语句

Declare statement in PL/SQL for a part of the query

我有如下查询:

select t1.varid, t1.var1, t1.var2, t1.vardata, t2.varid, t2.var1, t2,.var2 
from   table1 t1, table2 t2
where  t1.varid = t2.varid
and    t1.vardata between to_date('20170807','YYYYMMDD') and to_date('20170808','YYYYMMDD')

现在的问题是: 我不仅需要提取上面查询中指定的数据范围内的数据,而且我想在同一个查询中提取许多其他范围。

为此,我使用了 UNION ALL 并且它有效。问题是我不得不多次重写这部分:

select t1.varid, t1.var1, t1.var2, t1.vardata, t2.varid, t2.var1, t2, var2 
from   table1 t1, table2 t2
where  t1.varid = t2.varid

是否有关于如何将 select t1.varid... 定义为命名变量以避免长时间无聊的重复查询的提示?

欢迎任何其他解决方案。

正如聊天中所讨论的,您可以按照以下方式进行操作:

SELECT t1.varid  as col1,
       t1.var1   as col2,
       t1.var2,
       t1.vardata,
       t2.varid,
       t2.var1,
       t2,
       .var2
  FROM table1 t1, table2 t2
 WHERE     t1.varid = t2.varid
       AND t1.vardata BETWEEN TO_DATE ('20170807', 'YYYYMMDD')
                          AND TO_DATE ('20170808', 'YYYYMMDD')
        --- Give date ranges.                  
       OR   t1.vardata BETWEEN TO_DATE ('20170907', 'YYYYMMDD')
                          AND TO_DATE ('20171008', 'YYYYMMDD')                  
       OR ....
       OR ....

您可以尝试像这样直接从 table 中获取日期,而不是重写重复的语句:

Select 'select t1.varid, t1.var1, t1.var2, t1.vardata, t2.varid, t2.var1, t2,.var2 
From table1 t1, table2 t2 where t1.varid = t2.varid and t1.vardata between to_date('''+MY_DATE+''', ''yyyymmdd'')'  from tableofdate 

下面是模式 used.This 只是 sample.Please 根据您的要求编辑它

create table tableofdate(my_date varchar(100))
insert into tableofdate values ('20170808')