本站首页    管理页面    写新日志    退出

The Neurotic Fishbowl

在 oracle 中实现 anto increase
nobdy 发表于 2008/8/9 16:29:50

目标(举例子说明):  创建表    CREATE TABLE INC_TEST(      ID NUMBER(6),      NAME VARCHAR2(125)    ); 希望在插入新的数据且没有提供 id 值时,会将 id 值设置为一个在表的数据中没有用过的值;而插入新的数据时如果有提供 id 值,则使用所提供的 id 值。 例如执行  1) INSERT INTO INC_TEST(NAME) VALUES('nobdy');时,假如表内数据为空,则会加入一条数据为:(ID: 1, NAME: nobdy)然后再执行  2) INSERT INTO INC_TEST(NAME) VALUES('admin');后,则会增加一条数据:(ID: 2, NAME: admin)接着再执行  3) INSERT INTO INC_TEST(ID, NAME) VALUES(10, 'test');后,则会增加数据:(ID: 10, NAME: test)最后执行  4) INSERT INTO INC_TEST(NAME) VALUES('coremail');后,增加一条数据为:(ID: 11, NAME: coremail)   在 google 搜索了一下,发现网上所提供的方法都大同小异,即在插入数据时也不管用户有没有提供值就将其设置为自增的值,这样用户设置的值就丢失了。比如在执行上面例子中的 3) 时,插入的数据变成了(ID: 3, NAME: test)。 经过一番尝试,发现用一个 sequence 和一个 trigger 可以解决这个问题, 所有的代码如下所示:­DROP TABLE INC_TEST;­CREATE TABLE INC_TEST(  ID NUMBER(6),  NAME VARCHAR2(125));DROP SEQUENCE INC_TEST_SEQ;CREATE SEQUENCE INC_TEST_SEQ INCREMENT BY 1 START WITH 1 ORDER;CREATE OR REPLACE TRIGGER INC_INC_TESTBEFORE INSERT ON INC_TESTFOR EACH ROWDECLARE  CURRENT_VAL NUMBER:=0;BEGIN  IF :NEW.ID IS NULL THEN    SELECT INC_TEST_SEQ.NEXTVAL INTO :NEW.ID FROM DUAL;  ELSE    LOOP      EXIT WHEN (CURRENT_VAL >= :NEW.ID);      SELECT INC_TEST_SEQ.NEXTVAL INTO CURRENT_VAL FROM DUAL;    END LOOP;  END IF;END;/INSERT INTO INC_TEST(NAME) VALUES('nobdy');INSERT INTO INC_TEST(NAME) VALUES('admin');INSERT INTO INC_TEST(ID, NAME) VALUES(10, 'test');INSERT INTO INC_TEST(NAME) VALUES('coremail');INSERT INTO INC_TEST(ID, NAME) VALUES(5, 'mailtech');INSERT INTO INC_TEST(NAME) VALUES('simon');

阅读全文(2541) | 回复(0) | 编辑 | 精华

 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)

 
 



The Neurotic Fishbowl

.: 公告

暂无公告...


Bloginess

«September 2025»
123456
78910111213
14151617181920
21222324252627
282930

.: 我的分类(专题)

首页(5)


In the Bowl

.: 最新日志

在 oracle 中实现 anto in
浪漫而不伤感--辛巴达七海传奇片末经典对
我修改后的 IE 调试工具firebug
让我们学会如何快乐的工作
javascript版本的HashMap


.: 最新回复

回复:让我们学会如何快乐的工作
回复:让我们学会如何快乐的工作
回复:让我们学会如何快乐的工作
回复:浪漫而不伤感--辛巴达七海传奇片末
回复:我修改后的 IE 调试工具fire
回复:让我们学会如何快乐的工作
回复:我修改后的 IE 调试工具fire
回复:让我们学会如何快乐的工作
回复:我修改后的 IE 调试工具fire
回复:让我们学会如何快乐的工作


The Fishkeeper
blog名称:nobdy
日志总数:5
评论数量:25
留言数量:0
访问次数:99179
建立时间:2006年3月18日



Text Me

.: 留言板

签写新留言


Other Fish in the Sea

.: 链接





站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.148 second(s), page refreshed 144762610 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号