+ -
当前位置:首页 → 问答吧 → orcale表分区自动创建问题

orcale表分区自动创建问题

时间:2011-10-31

来源:互联网

oracle数据表我是按某一列进行列表分区,然后我想实现插入一条数据进行判断,如果新插入的数据的该列没有表分区,就进行自动添加表分区,然后插入进去,如果有了就直接插入该表分区。用plsql触发器实现。我自己写了代码但是无法实现。我把它贴出来,如果能再原程序上修改最好,如果我的思路都错了,能写一个就谢谢了您了。我是刚进入这一行,越详细越好,谢谢各位前辈了!代码如下:
create or replace trigger tg_tbinfo
before insert on tbinfo for each row
declare
v_pd number:=1;
v_tid Tbinfo.Tid%type;
type sp_coure is ref cursor;
sp_tbinfo_coursor sp_coure;
begin
open sp_tbinfo_coursor for select tid from Tbinfo ;
  loop
  fetch sp_tbinfo_coursor into v_tid;
  exit when sp_tbinfo_coursor%notfound;
  if v_tid <> :new.tid then 
  v_pd:=0; 
  else 
  v_pd :=1;
  end if;
end loop;
if v_pd=0 then
  execute immediate'alter table tbinfo add partition sp_5 values(&new.tid);';  
  end if;
close sp_tbinfo_coursor;
end;

作者: lifan185   发布时间: 2011-10-31

不可能做到,insert的时候会锁表,因此绝对不会允许你进行对锁定表的 ddl(就是alter),你的想法是实现不了滴。

列表分区的一个特点就是要事先对可能有的值进行估计和测算, 如果不能确定就不要用列表分区了。

作者: BenChiM888   发布时间: 2011-10-31

也是就是说我只能用程序进行判断,然后再往数据库里面插入创建新分区的指令?

作者: lifan185   发布时间: 2011-10-31

在别人没有锁定这个表的情况下,可以。
但是如果多人同时执行你说的这个所谓的程序的话,肯定会造成资源的争用。

换个思路吧。 这个思路不现实。




引用 2 楼 lifan185 的回复:
也是就是说我只能用程序进行判断,然后再往数据库里面插入创建新分区的指令?

作者: BenChiM888   发布时间: 2011-10-31

高手给个建议吧,我是不知道咋办了

作者: lifan185   发布时间: 2011-10-31

引用 4 楼 lifan185 的回复:

高手给个建议吧,我是不知道咋办了

你这个字段的值很多的吗?

作者: opps_zhou   发布时间: 2011-10-31

非常多,初步算做10万,数据量要不大也不会分区呀。
高手有解决办法吗?

作者: lifan185   发布时间: 2011-10-31

我是问,需要做分区的字段的取值有很多吗?
比如说有 100 万数据,但是这个字段的取值只有 3 个,那么就是分 3 个区

引用 6 楼 lifan185 的回复:

非常多,初步算做10万,数据量要不大也不会分区呀。
高手有解决办法吗?

作者: opps_zhou   发布时间: 2011-10-31