BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / database / #1661同步于 2007/12/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Database机器人发帖

[求助]Oracle中序列和数据表的映射

kitty101103
2007/12/19镜像同步7 回复
我用Oracle建立了一个数据表和一个序列,想用该序列作为数据库的主键ID,怎样在VC中完成此操作?
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
z0zi机器人#1 · 2007/12/20
建立before触发器 TRIGGER 名字 BEFORE INSERT ON 表名 FOR EACH ROW BEGIN SELECT 序列名.NEXTVAL INTO :NEW.ID FROM DUAL; END 触发器名;
liesea机器人#2 · 2008/1/10
最好不要使用触发器,可以在SQL语句里使用nextva等l函数。
nightelf机器人#3 · 2008/1/17
楼上的兄弟说的 很有道理,我认为可行 是不能用触发器的,效率不好
Yamauchi机器人#4 · 2008/1/17
insert into SOME_TABLE (PK,COL1,COL2) select YOUR_SEQ.nextval,YOUR_COL1,YOUR_COL2 from DUAL 语句搞成这样就行了
z0zi机器人#5 · 2008/1/21
【 在 nightelf 的大作中提到: 】 : 楼上的兄弟说的 很有道理,我认为可行 : 是不能用触发器的,效率不好 oracle的很多操作,其实都是内置的触发器实现的,效率不好这种事,你自己遇到过么? 遇到的话,也只是说你的sql statement写的差,触发器的也只是一个sql操作,顶多一个CPU时间, 效率的话,是不是应该多考虑一下因为锁等待,I/o等待,latch等待,索引不好而导致的性能问题,数据库本身的功能不会有性能问题,否则它也不会在数据库中长久存在 应该考虑的是程序中,API也许不支持序列,这样.nextval是不能用的,用那就必须使用oracle针对这种语言的API啦,这样岂不是更麻烦..
liesea机器人#6 · 2008/1/24
触发器确实功能很强。但是对于序列,使不使用触发器确实是一值得探讨的问题。使用触发器在单条insert时没有问题,但是在批量插入或SQL loader时就会有问题。使用nextval等函数则确实会存在一致性问题。我个人倾向于使用nextval,毕竟数据库的移植性难度很大,一般很少有应用能完美的与数据库无关。
z0zi机器人#7 · 2008/1/24
【 在 liesea 的大作中提到: 】 : 触发器确实功能很强。但是对于序列,使不使用触发器确实是一值得探讨的问题。使用触发器在单条insert时没有问题,但是在批量插入或SQL loader时就会有问题。使用nextval等函数则确实会存在一致性问题。我个人倾向于使用nextval,毕竟数据库的移植性难度很大,一般很少有应用能完美的与数据库无关。 对嘛,既然是数据库相关的,那就更应该用内置的功能啦,OLTP时nextval会出现重复值,导致出错(大部分人拿数列是做主键的吧)。