设为首页 收藏本站
查看: 459|回复: 0

[经验分享] Oracle新表使用序列(sequence)作为插入值,初始值不是第一个

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-10-16 10:50:07 | 显示全部楼层 |阅读模式
使用oracle11g插入数据时遇到这样一个问题:
--创建测试表--
CREATE TABLE tbl_test(
       test_id NUMBER PRIMARY KEY,
       test_name VARCHAR2(20)
);

--为tbl_test创建序列--
CREATE SEQUENCE seq_test
    INCREMENT BY 1 -- 每次加几个
    START WITH 1 -- 从1开始计数
;

--插入测试数据--
INSERT INTO tbl_test VALUES(seq_test.nextval,'测试');
COMMIT;

--查询表中的数据
SELECT * FROM tbl_test;
显示结果:
http://data:image/png;base64,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



问题原因:
·当我们使用序列作为插入数据时,如果使用了“延迟段”技术,则跳过序列的第一个值
·Oracle从 11.2.0.1版本开始,提供了一个“延迟段创建”特性:

当我们创建了新的表(table)和序列(sequence),
在插入(insert)语句时,序列会跳过第一个值(1)。
所以结果是插入的序列值从 2(序列的第二个值) 开始, 而不是 1开始。

想要解决这个问题有两种方法:

更改数据库的“延迟段创建”特性为false(需要有相应的权限)
ALTER SYSTEM SET deferred_segment_creation=FALSE;


或者

在创建表时让seqment立即执行,如:

CREATE TABLE tbl_test(    test_id NUMBER PRIMARY KEY,     test_name VARCHAR2(20)) SEGMENT CREATION IMMEDIATE;



以上两种方法都可以解决之前的问题。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-26159-1-1.html 上篇帖子: Oracle 10g WM_CONCAT行转列函数用法及注意点 下篇帖子: ORA-01102: cannot mount database in EXCLUSIVE mode
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表