sql中varchar的nextval序列?

时间:2009-08-23 23:52:54

标签: oracle sequence varchar nextval

我想知道是否有办法为nextval值制作varchar序列? 我正在使用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;

2 个答案:

答案 0 :(得分:1)

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

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

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

如果你想要一个更复杂的系列,比如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>

答案 1 :(得分:0)

如果您想要生成测试数据,请查看Swingbench/Data Generator