日期:2014-05-17  浏览次数:20701 次

id主键是String问题?谢谢了
table A 的id是字符串,而且生成的规则是abc201109160001 (abc是固定的,20110916获取时间,0001流水号)

所以啊~,当我插入数据的时候,需要自己写一个java方法,让用户在添加一个表单时候,每次按照规则插入数据。

下一个月的时候,流水帐号又从0001开始:abc201110010001 

~------------------------
ZkSqNsrzgZb zgsqzb = new ZkSqNsrzgZb();
 
zgsqzb.setZgsqLsh("abc201109160001"); 我现在都是这样写死的 ~~~哭。。。


有那么大哥哥,大姐姐们帮个忙。谢谢了

------解决方案--------------------
建议触发器少用:
我一般只用触发器做日志,或者备份,很少做业务处理


表结构:
-- Create table
create table AUTONO
(
targetnum CHAR(15) not null,
sex VARCHAR2(6),
name VARCHAR2(10)
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
-- Create/Recreate primary, unique and foreign key constraints 
alter table AUTONO
add constraint TARGETNUM_PK primary key (TARGETNUM)
using index 
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
create or replace trigger AutoNum
before insert on autono
for each row
Declare
sTempNo Varchar2(20) := '';
Begin
Select nvl(substr(Trim(Max(t.targetnum)), -4, 4), 0) + 1
Into sTempNo
From autono t
Where t.targetnum Like 'abc%'
And substr(Trim(t.targetnum), -12, 8) =
to_char(Sysdate, 'yyyymmdd');
sTempNo := substr('0000' || sTempNo, -4, 4);
sTempNo := 'abc' || to_char(Sysdate, 'yyyymmdd') || sTempNo;
:new.targetnum := sTempNo;
End AutoNum;



测试语句:
insert into autono(sex,name) values('男','张三');
insert into autono(sex,name) values('女','李四');
insert into autono(sex,name) values('未确定','王五');

测试结果:
abc201109240001 男 张三
abc201109240002 女 李四
abc201109240003 未确定 王五
abc201109240004 男 张三
abc201109240005 女 李四
abc201109240006 未确定 王五