2009-12-09 129 views
0

之前,我有一個名爲Oracle表:Web表單插入並觸發插入

create table InsertHere(
    generate_id varchar2(10), 
    name varchar2(100) 
); 

我已經從網絡在此表中插入數據。在Web表單有兩個 元素:

類型和名稱

。我必須從用戶選擇的類型生成'generate_id'。

任務:

插入到InsertHere表我不得不產生之前,generate_id。然後,我必須在InsertHere表中插入 'generate_id'和'name'。但生成的ID必須在DATABASE內部完成(可能有一個過程)。

問題:

這件事情可以如何有效地完成?

我需要建議。

在此先感謝

回答

1

這一切都取決於您所說的「生成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> 

可以改變精確的實現,取決於你想要如何調用它。通常情況下,細節問題和更多的信息往往會導致更相關的答案。

+0

謝謝您的詳細解答。它會幫助我很多。但我想用觸發器代替。因爲我必須做兩件事:首先我必須在插入表之前生成id。第二,我必須在插入到InsertHere表後更新另一個表。但問題是我如何傳遞參數來觸發...?還是有另一種方式? – FlintOff 2009-12-10 04:26:26