在数据库里任找一个超过2000年到2005年间天数的表作为temp表,执行:
  select rownum id
  ,to_date('2000-1-1','yyyy-mm-dd')+(rownum-1) day
  ,MOD(6+(rownum-1),7) week
  ,to_char(to_date('2000-1-1','yyyy-mm-dd')+(rownum-1),'MM') month
  ,to_char(to_date('2000-1-1','yyyy-mm-dd')+(rownum-1),'YYYY') year
  from temp 
  where rownum<=(to_date('2006-1-1','yyyy-mm-dd')-to_date('2000-1-1','yyyy-mm-dd'))

解决方案 »

  1.   

    可不需找到temp表,用all_objects来代替
    select rownum id
      ,to_date('2000-1-1','yyyy-mm-dd')+(rownum-1) day
      ,MOD(6+(rownum-1),7) week
      ,to_char(to_date('2000-1-1','yyyy-mm-dd')+(rownum-1),'MM') month
      ,to_char(to_date('2000-1-1','yyyy-mm-dd')+(rownum-1),'YYYY') year
      from all_objects
      where rownum<=(to_date('2006-1-1','yyyy-mm-dd')-to_date('2000-1-1','yyyy-mm-dd'))
    问题是,all_objects代表什么啊,常看到dual,dual是代表系统表么?
      

  2.   

    在Oracle数据库中,Dual是特殊的表。简单地说,Dual是没有包含行和列的表。在需要编写不必返回任何存储在数据库中的数据的查询时,可以将Dual制定未表来查询。——摘自《SQL实用全书》P10
      

  3.   

    all_objects是数据字典视图
    http://www.oradb.net/oradict.htm
      

  4.   

    steedlu(steed),不要偏离主题,你要建立时间维,怎么扯到all_objects、dual. 我说的temp表,不是要建立这个表,而是任找一个记录数超过2000年到2005年间天数的表。
     all_objects可以用,但是要保证记录数足够。
      

  5.   

    shawnzhao,thanks,在oradb.net的解释里,all_objects的解释是:Objects accessible to the user,我的理解是存放了数据库中所有的用户信息(表定义,用户名及权限等等),不知是否如此。
    不是偏离主题,实在是不懂的太多,多谢指点。