2009-12-09 2 views
0

J'ai une table d'oracle appelé:forme web insert et déclencheur avant insertion

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

Je dois insérer des données dans ce tableau d'une bande de. Dans la forme web, il y a deux éléments:

type et le nom

. Je dois générer 'generate_id' à partir du type que l'utilisateur a sélectionné.

Tâche:

Avant insertion dans la table InsertHere je dois générer le generate_id. Ensuite, je dois insérer 'generate_id' et 'name' dans la table InsertHere. MAIS LA GÉNÉRATION DE L'ID DOIT ÊTRE FAIT À L'INTÉRIEUR DE LA BASE DE DONNÉES (peut être avec une procédure).

Question:

Comment cette chose peut être fait efficacement?

J'ai besoin de suggestions.

Merci à l'avance

Répondre

1

Tout dépend ce que vous entendez par « la génération ID ». L'ID est je présume une clé primaire, donc sa valeur doit être unique indépendamment de TYPE. Alors, quelles règles voulez-vous appliquer à sa génération?

Voici une approche indicative. Cela utilise une séquence pour obtenir une valeur et ajoute un caractère en fonction de 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> 

ici, il est en action

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> 

Vous pouvez modifier la mise en œuvre précise, selon la façon dont vous voulez l'appeler. Comme c'est souvent le cas, les détails importent et plus d'informations auront tendance à donner une réponse plus pertinente.

+0

Nous vous remercions de votre réponse détaillée. Cela m'aiderait beaucoup. Mais je pensais utiliser un trigger à la place. Parce que je dois faire deux choses: d'abord, je dois générer l'ID avant d'insérer dans la table. seconde je dois mettre à jour l'autre table après l'insertion dans la table InsertHere. Mais le problème est comment puis-je passer paramètre pour déclencher ...? ou est-ce qu'il y a un autre moyen? – FlintOff

Questions connexes