我在使用seq_t_user_info_id.nextval时,为什么会出现重复值呀?其中我创建seq_t_user_info_id的SQL 代码为:create sequence seq_t_user_info_id
minvalue 1
maxvalue 99999999999999999
start with 1
increment by 1
cache 20
order;但在执行下面的SQL时,报违反约束,其中我的User_id为主键,不能重复。insert INTO t_user_info(user_id,login_name)
SELECT
seq_t_user_info_id.nextval,substr(t.gsbm,1,2)||lpadseq_t_user_info_id.nextval,6,'0')
FROM at_t_user_info t
我这个语句有错吗?请大家帮忙看一下,谢谢了!!

解决方案 »

  1.   

    备注一下其中GSBM是有值的,就是公司编码GSBM会有重复值出现的。
      

  2.   

    lpadseq_t_user_info_id.nextval,6,'0')这是什么?肯定错了
      

  3.   

    先不管Sequence,你的句子,就少了一个左括号。
    Lpad`后面。
      

  4.   

    t_user_info德彪的结构是什么?主键是什么?
      

  5.   

    SELECT
    seq_t_user_info_id.nextval,substr(t.gsbm,1,2)||lpadseq_t_user_info_id.nextval,6,'0')
    FROM at_t_user_info t这个纪录,选出了很多条记录吧。
      

  6.   

    Croatia(Croatia) ( ) 信誉:95  2007-09-13 11:44:52  得分: 0  
     
     
       SELECT
    seq_t_user_info_id.nextval,substr(t.gsbm,1,2)||lpadseq_t_user_info_id.nextval,6,'0')
    FROM at_t_user_info t这个纪录,选出了很多条记录吧。
      
    为什么呢?我是想将at_t_user_info 临时表中的数据转到正式表t_user_info中呀!!
      

  7.   

    SELECT
    seq_t_user_info_id.nextval,substr(t.gsbm,1,2)||lpad(seq_t_user_info_id.nextval,6,'0')
    FROM at_t_user_info t查询看看,正常情况下是seq.nextval是不会出现重复的,是不是原来表中存在手动插入或者手动修改的userid, 而这个useid正好和当前插入的重复
      

  8.   

    把 t_user_info 的表结构贴出来看看
      

  9.   

    先用max函数找一下最大值,再看看序列的当前值,如果,呵呵
      

  10.   

    1. 定义sequence为nocycle (不循环使用).
    2. 下面的coding更清晰一点.select seq_t_user_info_id.nextval into a_var from dual;SELECT
    a_var,substr(t.gsbm,1,2)||lpad(a_var,6,'0')
    FROM at_t_user_info t
      

  11.   

    christophe,
    你这样的做法,a_var永远都是一个值,不错才怪。
      

  12.   

    先把t_user_info表里面的数据,备份出去,再执行一次看看呢?