触发器与自动编码? 最有效的办法是定义Unique Identity属性,自动增加的字段。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 触发器在dbserver中执行,从效率上应该高一些, 但是触发器对dbserver是一种强制行为,非常占用系统资料 对于应在ASP中还是用触发器有一权衡的问题 在asp中作效率受影响的,网络传输要3次,而用触发器做仅一次, 我学习了一下********1、Create Sequence 你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限, CREATE SEQUENCE emp_sequence INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOMAXVALUE -- 不设置最大值 NOCYCLE -- 一直累加,不循环 CACHE 10; 一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL CURRVAL=返回 sequence的当前值 NEXTVAL=增加sequence的值,然后返回 sequence 值 比如: emp_sequence.CURRVAL emp_sequence.NEXTVAL 可以使用sequence的地方: - 不包含子查询、snapshot、VIEW的 SELECT 语句 - INSERT语句的子查询中 - NSERT语句的VALUES中 - UPDATE 的 SET中 可以看如下例子: INSERT INTO emp VALUES (empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20); SELECT empseq.currval FROM DUAL; 但是要注意的是: - 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。明白? - 如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。 ***********首先创建 sequence create sequence seqmax increment by 1 2.使用方法 select seqmax.nextval ID from dual 两个小菜问题求解答 关于SQL的命名规则 紧急求援 误删了sysusers里guest 这条记录 现在怎么恢复? 修改表格字段问题 急求select语句! 遇到一非常特殊的分组难题, 分组区间不定, 组距不定, 求指点 mssql进程太大。有500M。然后用程序访问第一次访问没问题。再刷新一下就打不开了。 动态加载水晶报表 数据库疑难问题在线求救! 用CDblib 类产生的两个对象,怎么一个可以连接上SQL server ,而一个不行 数据库新手的问题,大侠指点一二。 VFP小问题,请各位大侠帮忙!
但是触发器对dbserver是一种强制行为,非常占用系统资料
对于应在ASP中还是用触发器有一权衡的问题
你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限,
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10; 一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL
CURRVAL=返回 sequence的当前值
NEXTVAL=增加sequence的值,然后返回 sequence 值
比如:
emp_sequence.CURRVAL
emp_sequence.NEXTVAL 可以使用sequence的地方:
- 不包含子查询、snapshot、VIEW的 SELECT 语句
- INSERT语句的子查询中
- NSERT语句的VALUES中
- UPDATE 的 SET中 可以看如下例子:
INSERT INTO emp VALUES
(empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20); SELECT empseq.currval FROM DUAL; 但是要注意的是:
- 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。明白? - 如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。 ***********
首先创建 sequence create sequence seqmax increment by 1 2.使用方法 select seqmax.nextval ID from dual