INSERT INTO dm_wszldl
  (wszldl_dm, wszldl_mc, qybz)
values
  (to_char (SELECT seq_ws_zldl.nextval FROM dual), '测试类别', 'Y')我想要从序列中获取数字作为记录的主键,但是主键类型是varchar(2),上面的语句怎么修改才能实现我要的功能

解决方案 »

  1.   

    INSERT INTO dm_wszldl
      (wszldl_dm, wszldl_mc, qybz)
    values
      (to_char(seq_ws_zldl.nextval), '测试类别', 'Y')
      

  2.   

    --试一下:INSERT INTO dm_wszldl
      (wszldl_dm, wszldl_mc, qybz)
    values
      lpad(to_char(seq_ws_zldl.nextval),2,'0'), '测试类别', 'Y');
      

  3.   

    INSERT INTO dm_wszldl
      (wszldl_dm, wszldl_mc, qybz)
    values
      (to_char(seq_ws_zldl.nextval), '测试类别', 'Y')
      

  4.   

    可以把这个seq_ws_zldl改成到99就循环回1, 要不就把你的主键字段加长一点
      

  5.   

    你的主键是主键类型是varchar2(2),还是varchar2(), 长度是多少
    根据数据库定义的长度
    我支持这种:
    INSERT INTO dm_wszldl
      (wszldl_dm, wszldl_mc, qybz)
    values
      lpad(to_char(seq_ws_zldl.nextval),2,'0'), '测试类别', 'Y');
     2是你数据库主键定义的长度
      

  6.   

    楼上说的都不错
    只不过你的主键类型是varchar2(2),当sequence超过2位数呢
      

  7.   

    1.首先修改 序列seq_ws_zldl的最大值为99
    2.
    INSERT INTO dm_wszldl 
      (wszldl_dm, wszldl_mc, qybz) 
    values 
      (to_char (SELECT seq_ws_zldl.nextval FROM dual), '测试类别', 'Y') 
    修改为:
    INSERT INTO dm_wszldl 
      (wszldl_dm, wszldl_mc, qybz) 
    SELECT to_char(seq_ws_zldl.nextval), '测试类别', 'Y'  FROM dual; 
      

  8.   

    用触发器吧定义一个tiger,当往表里插数据时,触发器来负责添加编号字段