你的问题没有意义。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>