2009-12-09 3 views
0

У меня есть таблица оракула называется:веб-формы вставки и триггер перед тем вставкой

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

я должен вставить данные в этой таблице из полотна с. В веб-форме есть два элемента:

тип и имя

. Мне нужно сгенерировать 'generate_id' из выбранного пользователем типа.

Задача:

Перед вставкой в ​​таблицу InsertHere я должен генерировать generate_id. Затем мне нужно вставить «generate_id» и «name» в таблицу InsertHere. НО ПОЛУЧЕНИЕ ИДЕНТИФИКАЦИИ ДОЛЖНО БЫТЬ СДЕЛАНО В ДАННОЙ БАЗЕ (может быть с процедурой).

Вопрос:

Как эта вещь может быть сделана эффективно?

Мне нужны предложения.

Заранее спасибо

ответ

1

Это все зависит, что вы имеете в виду под «генерации 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

Благодарим вас за подробный ответ. Это мне очень помогло. Но я думал об использовании триггера. Потому что я должен сделать две вещи: сначала мне нужно сгенерировать идентификатор перед вставкой в ​​таблицу. второй я должен обновить другую таблицу после вставки в таблицу InsertHere. Но проблема в том, как я могу передать параметр для запуска ...? или есть другой способ? – FlintOff