2012-10-02 44 views
0

好吧,這是一個類似的問題,就像我之前有過的類似的問題,但它的要求是它需要一個變量,它需要儘可能簡單。 我需要一個視圖來生成給定月份內的日期列表(即變量)。視圖中的日期列表

這是我到目前爲止有:

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' ....

感謝您的任何意見或幫助

回答

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')); 

Here是一個小提琴

+0

嗯,你是對的,但偉大的工程,但我的目標,如果可能的話,我懷疑它是,我希望這在視圖中工作。任何想法如何可以工作? – Thevagabond

+0

@Thevagabond,那麼也許這個帖子可能有助於http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:906341500346611919 –

+0

似乎不可能做到這一點在一個視圖中,然後......哦:-)然後感謝您的功能。它會做得很好:-) – Thevagabond