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