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;
/

可是这样建的话 日期改变之后序列产生的值并不重新循环
哪位高手帮忙解决一下啊!!!
展开
 我来答
badkano
推荐于2018-03-26 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144777 获赞数:885364
团长

向TA提问 私信TA
展开全部

那个序列根本就不起作用,单独用触发器吧,省的用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)

然后有数据后再执行上边那句,看下效果

百度网友5949423
2013-09-04 · TA获得超过120个赞
知道答主
回答量:55
采纳率:0%
帮助的人:43.3万
展开全部
可以每天定时重新建sequence,先把原来的删除掉,这样即可实现.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-09-05
展开全部
永远记住一条,表的主键和业务没有任何关系,ID分配了就绝对不可能更改
有人修改姓名、年龄个人信息的,你听说过有人修改身份证号的吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
太平岁年丰9
2013-09-04 · TA获得超过1230个赞
知道小有建树答主
回答量:1017
采纳率:100%
帮助的人:1082万
展开全部
细想一下,你这种设计方式有些不合理,建议换个思路
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式