我想知道是否有办法为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;
答案 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