0

好的,这是一个与我之前遇到的问题类似的问题,但它要求它需要是一个具有 1 个变量的视图,并且它需要尽可能简单。我需要一个视图来生成给定月份内的日期列表(即变量)。

这是我到目前为止所拥有的:

create view monthview(datesetter) as (   
select
to_date(to_date(datesetter),'MM.YYYY')-1 + level as DateRange
from
dual
where
(to_date(to_date(datesetter),'MM.YYYY')-1+level) <= sysdate
connect by level<=31);

并且视图应该被类似的东西调用:

select * from monthview where datesetter='02.2008';

然后生成一个类似的列表

01.02.2007
02.02.2007

等等

它要么告诉我由于使用 datesetter 时出现错误而无法编译视图,要么它编译了视图,但随后它告诉我存在一个非数字值,当我需要数字值时使用'datesetter' ....

感谢您的任何想法或帮助

4

1 回答 1

2

尝试流水线功能:

create or replace type date_array_type as table of date;

create or replace function monthview (datesetter varchar2) return date_array_type
pipelined as

cursor c is 
select to_date(level || '.' || datesetter , 'dd.mm.yyyy') dt
from dual
connect by level <= to_number(to_char(
  last_day(to_date(datesetter , 'mm.yyyy')), 'dd'));

begin

for r in c loop

  pipe row(r.dt);

end loop;

return;

end;

现在你可以像这样使用它:

select * from table( monthview('03.2012'));

是一个小提琴

于 2012-10-02T09:22:31.027 回答