2009-08-23 74 views
0

我想知道是否有一種方法爲varchar值創建nextval序列? 我正在使用iSQL plus,oracle。 例如我有一個銷售表,它由sale_id,prod_id,cust_name,sale_name組成。 ,我通過以下操作插入數據:nextval序列爲SQL中的varchar?

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; 

回答

1

你的問題就沒有意義了。對於varchar,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> 
+0

我只是不知道如何字呢。我不是說nextval,而是nextval的varchar版本。因爲我嘗試使用dbms_random.string('U',5);但它不起作用。 – taksIV 2009-08-24 03:27:25

相關問題