oracle中序列每隔一天就重新循环 怎么弄?
需求是这样的假设有一个表books表的结构是这样的NameTypeNullableDefaultComments-----------------------------...
需求是这样的 假设有一个表books 表的结构是这样的
Name Type Nullable Default Comments
----------- ------------ -------- ------- --------
BOOKID VARCHAR2(20)
BOOKNAME VARCHAR2(20) Y
PUBLISHERID VARCHAR2(20) Y
BOOKIMGSRC VARCHAR2(20) Y
PRICE NUMBER Y
WRITERID VARCHAR2(20) Y
WEARHOUSEID VARCHAR2(20) Y
可见其中的id是varchar2 的 想要设置主键自增 主键的格式是 书的上架日期加上由序列产生的编号 每当日期改变时序列就重新循环
我建立了序列如下
create sequence seq_bookid
minvalue 1000000---设置最小值1000000
maxvalue 9999999---设置最大值9999999
start with 1000000----从100000开始
increment by 1----每次加1
nocache;---不设缓冲区
建立触发器如下
create or replace trigger tri_bookid
before insert on books
for each row
begin
select to_char(sysdate,'yyyymmdd')||seq_bookid.nextval into :new.bookid from dual;
end;
/
可是这样建的话 日期改变之后序列产生的值并不重新循环
哪位高手帮忙解决一下啊!!! 展开
Name Type Nullable Default Comments
----------- ------------ -------- ------- --------
BOOKID VARCHAR2(20)
BOOKNAME VARCHAR2(20) Y
PUBLISHERID VARCHAR2(20) Y
BOOKIMGSRC VARCHAR2(20) Y
PRICE NUMBER Y
WRITERID VARCHAR2(20) Y
WEARHOUSEID VARCHAR2(20) Y
可见其中的id是varchar2 的 想要设置主键自增 主键的格式是 书的上架日期加上由序列产生的编号 每当日期改变时序列就重新循环
我建立了序列如下
create sequence seq_bookid
minvalue 1000000---设置最小值1000000
maxvalue 9999999---设置最大值9999999
start with 1000000----从100000开始
increment by 1----每次加1
nocache;---不设缓冲区
建立触发器如下
create or replace trigger tri_bookid
before insert on books
for each row
begin
select to_char(sysdate,'yyyymmdd')||seq_bookid.nextval into :new.bookid from dual;
end;
/
可是这样建的话 日期改变之后序列产生的值并不重新循环
哪位高手帮忙解决一下啊!!! 展开
4个回答
展开全部
那个序列根本就不起作用,单独用触发器吧,省的用sequence问题多
create or replace trigger tri_bookid
before insert on books
for each row
declare v_id varchar2(7);
begin
select max(substr(nvl(bookid,'1000000'),9,7)) into v_id from books where substr(nvl(bookid,to_char(sysdate,'yyyymmdd')),1,8)=to_char(sysdate,'yyyymmdd');
if v_id is null
then
:new.bookid:=to_char(sysdate,'yyyymmdd')||1000000;
else
:new.bookid:=to_char(sysdate,'yyyymmdd')||to_number(v_id)+1;
end if;
end;
然后,你随便把表置空,执行下
insert into books (bookname,publisherid,bookimgsrc,price,writerid,wearhouseid) values (2,2,2,2,2,2)
然后有数据后再执行上边那句,看下效果
展开全部
可以每天定时重新建sequence,先把原来的删除掉,这样即可实现.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-09-05
展开全部
永远记住一条,表的主键和业务没有任何关系,ID分配了就绝对不可能更改
有人修改姓名、年龄个人信息的,你听说过有人修改身份证号的吗?
有人修改姓名、年龄个人信息的,你听说过有人修改身份证号的吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
细想一下,你这种设计方式有些不合理,建议换个思路
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询