ORACLE自增字段的问题,希望高手帮忙解决,谢谢。

senhai 2008-04-18 09:57:28
现在想创建一个表,ID自增为TUR200812250001(TUR+日期+自增号)这样的形式,用什么方法比较好?
很着急,谢谢!
...全文
160 点赞 收藏 15
写回复
15 条回复
qing878 2008年07月18日
谢谢了!
回复 点赞
权子。 2008年04月21日
[Quote=引用 10 楼 HelloWorld_001 的回复:]
每天重置就从1开始了,
[/Quote]
恩这是个好办法,再加上JOB 就OK了..
回复 点赞
19az 2008年04月21日
可以增加个job,每天0点整的时候重置序列,具体如何重置序列,自己可以存储过程让job每天来调,存储过程写法可参照:
http://blog.csdn.net/bzszp/archive/2005/03/15/320288.aspx
回复 点赞
SYUEHOKO 2008年04月21日
关于采番...LZ好像没有什么概念!!!
回复 点赞
panxuan 2008年04月21日
[Quote=引用 5 楼 zhpsam109 的回复:]
用序列+触发器实现!
触发器中
:new.Id='TUR' ¦ ¦to_char(sysdate,'yyyymmdd') ¦ ¦lpad(seq.nextval,5,'0');
具体序列+触发器实现自增的方法,google一下!
[/Quote]
也可以封装成一个方法。每次新增就Get一下。
回复 点赞
HelloWorld_001 2008年04月18日
每天重置就从1开始了,
回复 点赞
realduke 2008年04月18日
[Quote=引用 3 楼 senhai 的回复:]
引用 1 楼 HelloWorld_001 的回复:
TUR ¦ ¦to_char(sysdate,'yyyymmdd') ¦ ¦sequence名字.next

以前看过的,每天把seq重置就好了



每天都要重置?怎么重置?
我比较菜不是很清楚。
[/Quote]
之所以要重置,是可能由于seq的长度不够,会导致重复记录,如seq的最大值为999,当你一天中插入第1000条记录时,则seq又变成001了,则与第一条记录的id相同;如果你能保证每天插入的记录不会超过seq的最大长度,则无需重置。
回复 点赞
ngdgycc 2008年04月18日
建立序列:
CREATE SEQUENCE seq_id
Increment By 1
Start With 1
MaxValue 99999
NoCache
Cycle
Order;

INSERT INTO your_table (...) VALUES('TUR'||to_char(sysdate,'yyyymmdd')||to_char(seq_id.nextval,'fm00000'),....);
回复 点赞
senhai 2008年04月18日
[Quote=引用 4 楼 super_ssy 的回复:]
更正一点
INSERT INTO MYTABLE(ID,……) VALUES('TUR'¦¦to_char(sysdate,'yyyymmdd')¦¦MYSEQUENCE.NEXTVAL,……)
[/Quote]

OK!试一下!
回复 点赞
senhai 2008年04月18日
[Quote=引用 5 楼 zhpsam109 的回复:]
用序列+触发器实现!
触发器中
:new.Id='TUR' ¦ ¦to_char(sysdate,'yyyymmdd') ¦ ¦lpad(seq.nextval,5,'0');
具体序列+触发器实现自增的方法,google一下!
[/Quote]

谢了!
回复 点赞
zhpsam109 2008年04月18日
用序列+触发器实现!
触发器中
:new.Id='TUR'||to_char(sysdate,'yyyymmdd')||lpad(seq.nextval,5,'0');
具体序列+触发器实现自增的方法,google一下!
回复 点赞
super_ssy 2008年04月18日
更正一点
INSERT INTO MYTABLE(ID,……) VALUES('TUR'¦¦to_char(sysdate,'yyyymmdd')¦¦MYSEQUENCE.NEXTVAL,……)
回复 点赞
senhai 2008年04月18日
[Quote=引用 1 楼 HelloWorld_001 的回复:]
TUR ¦ ¦to_char(sysdate,'yyyymmdd') ¦ ¦sequence名字.next

以前看过的,每天把seq重置就好了
[/Quote]


每天都要重置?怎么重置?
我比较菜不是很清楚。
回复 点赞
super_ssy 2008年04月18日
用触发器结合ORACEL自增序列就可以做了,在触发器里对插入动作的时候,触发类似如下语句就行
INSERT INTO MYTABLE(ID,……) VALUES('TUR'||SYSDATE||MYSEQUENCE.NEXTVAL,……)
回复 点赞
HelloWorld_001 2008年04月18日
TUR||to_char(sysdate,'yyyymmdd')||sequence名字.next

以前看过的,每天把seq重置就好了
回复 点赞
发动态
发帖子
Oracle 高级技术
创建于2007-09-28

2927

社区成员

1.8w+

社区内容

Oracle 高级技术相关讨论专区
社区公告
暂无公告