创建一个序列,最简单的创建序列的方法create sequence seq;
insert into table(seq.nextval, name, type);
这样id就会自动增加了,而且永远不会重复
insert into table(seq.nextval, name, type);
这样id就会自动增加了,而且永远不会重复
解决方案 »
- 请教sql问题,刚才那位仁兄的语句看似对了,但结果还是不行啊
- Oracle9i数据备份的问题
- 建表正常了,为什么插入数据的时候出错?
- 系统用户无法查询普通用户建立的表
- 在procedure中如何使用 execute immediate 执行update语句 急在线等
- oracle中如何查看各个表占用的空间的大小?
- oracle进程问题????困扰很久的问题????
- 建立了触发器后,不能保存数据,请教.
- 我在oracle官方网站上下载的Oracle9i Personal Edition
- 麻烦大家解决一下这个sql~~~
- 请问:如何追加日期型的字段值?
- 怎么在Oracle中任何用户都可以以管理员身份登录啊?
如果只有有限的几类,可以对应每类建立一个seq
在insert触发器中根据类别的不同来创建id号。
就是因为这次不能用序列了~
snowy_howe(天下有雪):
那个“类别”很多~没准多少
方法:
求出某种type的记录最大数+1,按一定格式用TO_CHAR把它转成字符,如需定长4位字符
SQL> select '22'||to_char(count(id)+1,'fm0000') from a where type='22';最好以上语句写在程序中,将查询结果赋给变量id_type,插入数据时id的值就是id_type
试试看
NAME(VARCHAR2),TYPE(NUMBER)
要插入表TAB2,字段ID,NAME,TYPE
insert into tab2
select a.type*100+a.rownum-b.row_min,a.name,a.type
from ( select name,type,rownum rowid from tab1 order by type) a,
(select type,min(row_id) row_min
from (select name,type,rownum row_id
from (select name,type from tab1 order by type)
) group by type
) b
where a.type=b.type;
这样应该可以。
我用的好像没这么麻烦,
insert into test (ucode, name, utype) values
((select TO_CHAR(substr(max(Ucode), -2)+1, 'fm000') from test where utype='a32'), 'www', 'a32');
一句搞定:)
表结构是:
ucode name utype
003 ddd a32
004 sss a32
......
本来想用count的,后来发现要是中间的给删了就麻烦了~
好了,没事了,多谢各位帮忙~:)