0

我想知道是否有一种方法可以nextval为值创建序列varchar?我正在使用 iSQL plus,oracle。例如,我有一个由 , sale_id, prod_id,cust_name组成的销售表sale_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;
4

2 回答 2

1

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

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

如果您想要生成一个流,A, B, C ... Z, AA, AB ... AZ, AAA那么您可以编写一个函数,该函数采用常规序列并将其转换为 base 26(或者如果您想去,则为 base 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>
于 2009-08-24T03:07:10.653 回答
0

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

于 2009-08-24T05:32:50.893 回答