[Oracle] utiliser une sequence dans une insertion

utiliser une sequence dans une insertion [Oracle] - SQL/NoSQL - Programmation

Marsh Posté le 05-05-2003 à 10:28:25    

j'arrive pas à me servir d'une sequence dans une requete imbriquée pour insertion. par ce que le but, c'est avant toutd'avoir une clef unique, donc comme je sais pas comment faire pour verrouiller une table entre 2 requetes, ma solution c'est de tout faire dans une seule requete.
 
un coup de main?


Message édité par Taz le 05-05-2003 à 10:31:31
Reply

Marsh Posté le 05-05-2003 à 10:28:25   

Reply

Marsh Posté le 05-05-2003 à 12:57:25    

HAHA espionnage industriel tu sauras jamais !!!!  :D


---------------
« Le hasard, c’est différent de la chance. Parce que la chance, je n'en ai jamais. »
Reply

Marsh Posté le 05-05-2003 à 14:40:18    

++Taz a écrit :

j'arrive pas à me servir d'une sequence dans une requete imbriquée pour insertion. par ce que le but, c'est avant toutd'avoir une clef unique, donc comme je sais pas comment faire pour verrouiller une table entre 2 requetes, ma solution c'est de tout faire dans une seule requete.
 
un coup de main?


Ben heu, nom_de_sequence.nextval ?
Je vois pas trop où est ton problème, tu peux détailler ?


---------------
Gérez votre collection de BD en ligne ! ---- Electro-jazzy song ---- Dazie Mae - jazzy/bluesy/cabaret et plus si affinité
Reply

Marsh Posté le 05-05-2003 à 14:41:17    

ben
 
insert into matable values(select compteur.nextval from dual)
 
ça marche po

Reply

Marsh Posté le 05-05-2003 à 14:47:39    

++Taz a écrit :

ben
 
insert into matable values(select compteur.nextval from dual)
 
ça marche po


Tu peux te contenter de :
insert into ma_table (mon_id) values (ma_sequence.nextval);
Si ca, ca marche pas, c'est que ton serveur t'en veut.


---------------
Gérez votre collection de BD en ligne ! ---- Electro-jazzy song ---- Dazie Mae - jazzy/bluesy/cabaret et plus si affinité
Reply

Marsh Posté le 05-05-2003 à 15:01:43    

Si tu veux faire une insertion dans deux table (si j'ai bien compris :heink: ) Tu fais la premiere, puis la seconde et tu commit. Spa compliqué  ;)


Message édité par thecoin le 05-05-2003 à 15:02:29

---------------
Si tu regardes ce que le canard mange, tu ne mangeras pas de canard.
Reply

Marsh Posté le 05-05-2003 à 15:28:54    

tom> je testerai, mais j'ai des doutes quand meme,du fait qu'on precise pas d'ou vient ma_sequence.
 
thecoin > non, spa ça du tout.

Reply

Marsh Posté le 05-05-2003 à 16:34:59    

++Taz a écrit :

j'arrive pas à me servir d'une sequence dans une requete imbriquée pour insertion. par ce que le but, c'est avant toutd'avoir une clef unique, donc comme je sais pas comment faire pour verrouiller une table entre 2 requetes, ma solution c'est de tout faire dans une seule requete.
 
un coup de main?


http://lina.cli.di.unipi.it:8000/W [...] ch209.html
(example II)
 
accessible depuis
http://www.google.com/search?q=seq [...] =0&start=0
 
Je te conseille de mettre un trigger (B.I.R.) et d'oublier ce champ dans les insertions, ça te simplifiera la vie.

Reply

Marsh Posté le 05-05-2003 à 17:02:24    

yahoooo!! merci, genre
 
 
CREATE TRIGGER matablenew
 BEFORE INSERT ON matable FOR EACH ROW
 BEGIN
   SELECT matableseq.nextval
     INTO :new.id
     FROM dual;
END;
 
c'est OK

Reply

Marsh Posté le 05-05-2003 à 17:10:54    

++Taz a écrit :

yahoooo!! merci, genre
 
 
CREATE TRIGGER matablenew
 BEFORE INSERT ON matable FOR EACH ROW
 BEGIN
   SELECT matableseq.nextval
     INTO :new.id
     FROM dual;
END;
 
c'est OK


non, pas du tout.
Mais je me souviens plus exactement du truc.
Je vais tenter de trouver un bout de code généré par Designer.

Reply

Marsh Posté le 05-05-2003 à 17:10:54   

Reply

Marsh Posté le 06-05-2003 à 15:25:53    

ayé, un gars de ma promo m'a envoyé la came :  
http://nraynaud.com/designer/
le pks est la signature d'un package
le pkb est son body
le trg est le fichier contenant les  triggers, seul le premier t'intéresse (cg$BIR_SESSIONS).
T'es pas obligé de faire tout le bordel avec les ind_bidule.
tentative (sans Oracle) :

Code :
  1. PROMPT Creating Before Insert Row Trigger on 'SESSIONS'
  2. CREATE OR REPLACE TRIGGER cg$BIR_SESSIONS
  3. BEFORE INSERT ON SESSIONS FOR EACH ROW
  4. DECLARE
  5.     cg$rec cg$SESSIONS.cg$row_type;
  6.     cg$ind cg$SESSIONS.cg$ind_type;
  7. BEGIN
  8.     cg$rec.NO_SESSION := :new.NO_SESSION;
  9.     IF (:new.NO_SESSION IS NULL) THEN
  10.         SELECT SES_SEQ.nextval
  11.                     INTO   :new.NO_SESSION
  12.                     FROM   DUAL;
  13.     END IF;
  14. END;


 
voilà l'esprit du truc.

Reply

Marsh Posté le 06-05-2003 à 16:08:03    

nraynaud a écrit :

ayé, un gars de ma promo m'a envoyé la came :  
http://nraynaud.com/designer/
le pks est la signature d'un package
le pkb est son body
le trg est le fichier contenant les  triggers, seul le premier t'intéresse (cg$BIR_SESSIONS).
T'es pas obligé de faire tout le bordel avec les ind_bidule.
tentative (sans Oracle) :

Code :
  1. PROMPT Creating Before Insert Row Trigger on 'SESSIONS'
  2. CREATE OR REPLACE TRIGGER cg$BIR_SESSIONS
  3. BEFORE INSERT ON SESSIONS FOR EACH ROW
  4. DECLARE
  5.     cg$rec cg$SESSIONS.cg$row_type;
  6.     cg$ind cg$SESSIONS.cg$ind_type;
  7. BEGIN
  8.     cg$rec.NO_SESSION := :new.NO_SESSION;
  9.     IF (:new.NO_SESSION IS NULL) THEN
  10.         SELECT SES_SEQ.nextval
  11.                     INTO   :new.NO_SESSION
  12.                     FROM   DUAL;
  13.     END IF;
  14. END;


 
voilà l'esprit du truc.
 


Moauis, j'ai toujours trouvé ça lourd d'utiliser les trigger pour faire des clé avec séquences ... De façon général, d'ailleurs, j'aime pas trop les séquences auto ... Je préfère encore rajouter des choses dans le code d'une procédure et gardé la main sur ce que j'insere. Mais bon, ce n'est que mon avis, voir plutot ma préférence à moi  [:spamafote]


---------------
Gérez votre collection de BD en ligne ! ---- Electro-jazzy song ---- Dazie Mae - jazzy/bluesy/cabaret et plus si affinité
Reply

Marsh Posté le 06-05-2003 à 16:33:00    

:jap:

Reply

Marsh Posté le 08-05-2003 à 18:24:54    

Moi je suis partisant de ce genre de trigger, y compris des trigger qui mettent à jour des flags genre "date_crea" et "date_upd", ça évite d'avoir des surprises parcequ'un jour un gars à pondu une procédure sans savoir qu'il fallait les mettre à la main.
 
En somme, ma méthode de tomlameche, très bien pour un boulot perso dont on est le seul à assurer la maintenance. Ca devient par contre catastrophique si un jour tu ne t'occupe plus de ce programme et que ce sont d'autres personnes, pas forcément au courant des docs que tu as peut-être laissé qui assurent la maintenance.
 
Et surtout, dans un trigger de ce type, il faut aborder la requête si l'ID a été spécifié (ou la date ou autre). Cela garanti l'intégrité des données par rapport à la séquence, ou la réalité du timestamp dans le cas d'une date.


Message édité par MagicBuzz le 08-05-2003 à 18:26:28
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed