Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1636 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle] utiliser une sequence dans une insertion

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Oracle] utiliser une sequence dans une insertion

n°382379
Taz
bisounours-codeur
Posté le 05-05-2003 à 10:28:25  profilanswer
 

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
mood
Publicité
Posté le 05-05-2003 à 10:28:25  profilanswer
 

n°382560
kaloskagat​os
Posté le 05-05-2003 à 12:57:25  profilanswer
 

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. »
n°382711
tomlameche
Et pourquoi pas ?
Posté le 05-05-2003 à 14:40:18  profilanswer
 

++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é
n°382716
Taz
bisounours-codeur
Posté le 05-05-2003 à 14:41:17  profilanswer
 

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

n°382728
tomlameche
Et pourquoi pas ?
Posté le 05-05-2003 à 14:47:39  profilanswer
 

++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é
n°382762
thecoin
Chasseur de chasseur de canard
Posté le 05-05-2003 à 15:01:43  profilanswer
 

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.
n°382862
Taz
bisounours-codeur
Posté le 05-05-2003 à 15:28:54  profilanswer
 

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.

n°383007
nraynaud
lol
Posté le 05-05-2003 à 16:34:59  profilanswer
 

++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.

n°383075
Taz
bisounours-codeur
Posté le 05-05-2003 à 17:02:24  profilanswer
 

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

n°383099
nraynaud
lol
Posté le 05-05-2003 à 17:10:54  profilanswer
 

++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.

mood
Publicité
Posté le 05-05-2003 à 17:10:54  profilanswer
 

n°384518
nraynaud
lol
Posté le 06-05-2003 à 15:25:53  profilanswer
 

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.

n°384644
tomlameche
Et pourquoi pas ?
Posté le 06-05-2003 à 16:08:03  profilanswer
 

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é
n°384705
Taz
bisounours-codeur
Posté le 06-05-2003 à 16:33:00  profilanswer
 

:jap:

n°387316
MagicBuzz
Posté le 08-05-2003 à 18:24:54  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle] utiliser une sequence dans une insertion

 

Sujets relatifs
[Oracle] n00b queries help (je maitrise pas les sub queries)Queries Oracle 8i + TOAD + help queries
[Oracle/SQL]Lister les colonnes d'une table ?[PHP] Quel logiciel pour interfacer oracle et php ?
Utiliser une variable dans une requête SQLQuels outils (Access, oracle... php, asp...) choisir ?
[Oracle] Comparaison de données dans != table[ORACLE] Récuperation d'information
Quels soft utiliser pour développer en PHP?[PHP] Intercépter un chemain pour l'utiliser comme source d'une image?
Plus de sujets relatifs à : [Oracle] utiliser une sequence dans une insertion


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR