Bo's Oracle Station

查看: 3257|回复: 3

每天自动创建分区表的问题

[复制链接]

2

主题

4

帖子

64

积分

注册会员

Rank: 2

积分
64
发表于 2017-11-21 08:50:47 | 显示全部楼层 |阅读模式

正常我们创建表时,使用UPDATA_TIME为分区字段,并且该字段为DATE类型,每天自动创建分区表,按以下脚本成功创建
create table t_day
( seq  number not null,
  update_time  date,
  constraint t_day_seq primary key(seq)
  )
  partition by range(update_time)
  interval(numtodsinterval(1,'day'))
  ( partition t_day1 values less than(to_date('20170101','yyyymmdd')) tablespace users);


现有生产需要,update_time 必须为char类型,该如何实现每天按update_time创建分区表?
create table t_day
( seq  number not null,
  update_time  char(8),
  constraint t_day_seq primary key(seq)
  )
  partition by range(to_date(update_time,'yyyymmdd'))                      --  这样执行出现错误   ORA--00907缺失右括号
  interval(numtodsinterval(1,'day'))
  ( partition t_day1 values less than(to_date('20170101','yyyymmdd')) tablespace users);


回复

使用道具 举报

1005

主题

1469

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
12012
发表于 2017-11-21 15:44:29 | 显示全部楼层
用虚拟列+range分区就行。需要向原来的表加一列虚拟列:
  1. create table t_day
  2. ( seq  number not null,
  3.   update_time  char(8),
  4.   constraint t_day_seq primary key(seq),
  5.    col1  date    as ( to_date('20170101','yyyymmdd') )
  6.   )
  7.   partition by range( col1 )              
  8.   interval(numtodsinterval(1,'day'))
  9.   ( partition t_day1 values less than(to_date('20170101','yyyymmdd')) tablespace users);
复制代码
回复 支持 反对

使用道具 举报

2

主题

4

帖子

64

积分

注册会员

Rank: 2

积分
64
 楼主| 发表于 2017-11-22 08:30:03 | 显示全部楼层
botang 发表于 2017-11-21 15:44
用虚拟列+range分区就行。需要向原来的表加一列虚拟列:

谢谢老师。。。
回复 支持 反对

使用道具 举报

2

主题

4

帖子

64

积分

注册会员

Rank: 2

积分
64
 楼主| 发表于 2017-11-22 08:30:28 | 显示全部楼层
botang 发表于 2017-11-21 15:44
用虚拟列+range分区就行。需要向原来的表加一列虚拟列:

嗯,谢谢老师。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Bo's Oracle Station   

GMT+8, 2024-3-29 08:46 , Processed in 0.029563 second(s), 24 queries .

快速回复 返回顶部 返回列表