【问题标题】:nextval sequence for varchar in sql? [closed]sql中varchar的nextval序列? [关闭]
【发布时间】:2009-08-23 23:52:54
【问题描述】:

我想知道是否有办法为varchar 值创建nextval 序列? 我正在使用 iSQL plus,oracle。 例如我有一个由sale_idprod_idcust_namesale_name 组成的销售表。 我通过执行以下操作插入数据:

insert into sales
select sale_id_seq.nextval,
trunc(dbms_random.value(1,100)),
(code for assigning random string for sale_name)
cust_id
from customer;

【问题讨论】:

    标签: oracle sequence varchar nextval


    【解决方案1】:

    你的问题没有意义。 varchar 的 NEXTVAL 是什么?

    如果你想在 varchar 列中存储一个数字,你可以,但你不应该。最好将数字保存在数字列中。

    如果您想要生成A, B, C ... Z, AA, AB ... AZ, AAA 的流,那么您可以编写一个函数,该函数采用常规序列并将其转换为base 26(或者如果您想使用1,2 ...9, A, B ... Z, 10, 11 ... 1A,则为base 36)。但是对于没有明显好处的事情来说,这是一个很大的努力。

    如果您想要更复杂的系列,例如2009/00000001, 2009/00000002 等,可以使用所谓的代码控制表来完成。这是一个手工制作的表格,其中包含最后一个分配的值。同样,您需要一些定制代码来生成下一个值。这种方法有一些严重的限制,其中最重要的是它序列化您的插入:您的代码必须对表发出锁定,因此第二个用户不能将记录插入到 CUSTOMER 直到第一个用户发出提交(或回滚)。

    编辑

    我不明白你为什么说 DBMS_RANDOM 不起作用。很明显:

    SQL> select dbms_random.string('U', 5)
      2  from dual
      3  /
    
    DBMS_RANDOM.STRING('U',5)
    --------------------------------------------------------
    
    IROGT
    
    SQL>
    

    【讨论】:

    • 我只是不知道该怎么说。我不是指nextval,而是nextval 的varchar 版本。因为我尝试使用 dbms_random.string('U',5);但它没有用。
    【解决方案2】:

    如果你想要生成测试数据的东西,请查看Swingbench/Data Generator

    【讨论】:

      猜你喜欢
      • 2011-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-05
      • 1970-01-01
      • 2017-10-22
      • 2018-12-11
      • 2022-10-07
      相关资源
      最近更新 更多