关于orcal序列问题?

sun78410683 2011-08-10 11:38:24
需求:穿件一个oracle序列:序列需满足如下条件,字符串+年月日+自增序列
如:T20110810 0001
T20110810 0002
.
.
需求具体思路 或者代码 谢谢!

...全文
179 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yan_xi_zao 2011-08-10
  • 打赏
  • 举报
回复
动态获得年月日,判断年和月在数据中是否存在,若存在,则把序列号自增。否则用新的年月和序列号拼接
QKForex 2011-08-10
  • 打赏
  • 举报
回复
写个函数实现
sun78410683 2011-08-10
  • 打赏
  • 举报
回复
谢谢luoyoumou 你这个方式的确解决了 我的问题 不过新的问题又来了 我们用JPA做映射的时候就不知道如何做了 。
luoyoumou 2011-08-10
  • 打赏
  • 举报
回复
-- 如果你的前缀字符可能随时变化的话,将其插入语句封装成存储过程,前缀字符用参数去传递即可!
luoyoumou 2011-08-10
  • 打赏
  • 举报
回复

CREATE TABLE t_test(
seq varchar2(20) not null primary key,
name varchar2(50)
);

-- 序列号占默认8位宽度
CREATE SEQUENCE t_test_seq start with 1 nocache maxvalue 99999999;

CREATE OR REPLACE TRIGGER t_test_trig_autoinc
BEFORE INSERT ON t_test
FOR EACH ROW
BEGIN
IF (:new.seq IS NULL) THEN
SELECT 'T'||to_char(sysdate,'yyyymmdd')||lpad(t_test_seq.nextval,8,'0') INTO :new.seq FROM DUAL;
END IF;
END;
/

insert into t_test(name) values('luoyoumou1');
insert into t_test(name) values('luoyoumou2');
insert into t_test(name) values('luoyoumou3');
insert into t_test(name) values('luoyoumou4');

commit;

select * from t_test;
luoyoumou 2011-08-10
  • 打赏
  • 举报
回复
scott@TBWORA> CREATE TABLE t_test(
2 seq varchar2(20) not null primary key,
3 name varchar2(50)
4 );

表已创建。

scott@TBWORA>
scott@TBWORA> -- 序列号占默认8位宽度
scott@TBWORA> CREATE SEQUENCE t_test_seq start with 1 nocache maxvalue 99999999;

序列已创建。

scott@TBWORA>
scott@TBWORA> CREATE OR REPLACE TRIGGER t_test_trig_autoinc
2 BEFORE INSERT ON t_test
3 FOR EACH ROW
4 BEGIN
5 IF (:new.seq IS NULL) THEN
6 SELECT 'T'||to_char(sysdate,'yyyymmdd')||lpad(t_test_seq.nextval,8,'0') INTO :new.seq FROM DUAL;
7 END IF;
8 END;
9 /

触发器已创建

scott@TBWORA>
scott@TBWORA> insert into t_test(name) values('luoyoumou1');

已创建 1 行。

scott@TBWORA> insert into t_test(name) values('luoyoumou2');

已创建 1 行。

scott@TBWORA> insert into t_test(name) values('luoyoumou3');

已创建 1 行。

scott@TBWORA> insert into t_test(name) values('luoyoumou4');

已创建 1 行。

scott@TBWORA>
scott@TBWORA> commit;

提交完成。

scott@TBWORA>
scott@TBWORA> select * from t_test;

SEQ NAME
------------------ --------------------
T2011081000000001 luoyoumou1
T2011081000000002 luoyoumou2
T2011081000000003 luoyoumou3
T2011081000000004 luoyoumou4
凌梦轩 2011-08-10
  • 打赏
  • 举报
回复
结合楼上两位的自己组织下应该就OK了
caoleione 2011-08-10
  • 打赏
  • 举报
回复
select 'T'||to_char(sysdate,'yyyymmdd')||lpad(seq.nextval,4,0) from dual

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧