這一切都取決於您所說的「生成ID」。 ID是我假設的主鍵,所以它的值必須是唯一的,無論類型。那麼你想應用哪一個規則來適應它的時代呢?
這是一個指示性的方法。這使用一個序列來獲取一個值並預先設置一個字符,具體取決於type
。
SQL> create or replace function generator
2 (p_type varchar2
3 , p_name in inserthere.name%type)
4 return inserthere.generate_id%type
5 is
6 c char(1);
7 return_value inserthere.generate_id%type;
8 begin
9 case p_type
10 when 'EXTREME' then
11 c := 'X';
12 when 'REGULAR' then
13 c := 'R';
14 when 'JUMBO' then
15 c := 'J';
16 else
17 c := 'P';
18 end case;
19
20 insert into inserthere
21 (generate_id,
22 name)
23 values
24 (c || lpad(trim(to_char(my_seq.nextval)), 9, '0')
25 , p_name)
26 returning generate_id into return_value;
27
28 return return_value;
29 end;
30/
Function created.
SQL>
這裏是行動
SQL> var n varchar2(10)
SQL> exec :n := generator ('EXTREME', 'ABC')
PL/SQL procedure successfully completed.
SQL> print n
N
--------------------------------
X000000001
SQL> exec :n := generator ('WHATEVER', 'SOMETHING')
PL/SQL procedure successfully completed.
SQL> print n
N
--------------------------------
P000000002
SQL>
可以改變精確的實現,取決於你想要如何調用它。通常情況下,細節問題和更多的信息往往會導致更相關的答案。
來源
2009-12-09 17:30:18
APC
謝謝您的詳細解答。它會幫助我很多。但我想用觸發器代替。因爲我必須做兩件事:首先我必須在插入表之前生成id。第二,我必須在插入到InsertHere表後更新另一個表。但問題是我如何傳遞參數來觸發...?還是有另一種方式? – FlintOff 2009-12-10 04:26:26