utiliser une sequence dans une insertion [Oracle] - SQL/NoSQL - Programmation
Marsh Posté le 05-05-2003 à 12:57:25
HAHA espionnage industriel tu sauras jamais !!!!
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. |
Ben heu, nom_de_sequence.nextval ?
Je vois pas trop où est ton problème, tu peux détailler ?
Marsh Posté le 05-05-2003 à 14:41:17
ben
insert into matable values(select compteur.nextval from dual)
ça marche po
Marsh Posté le 05-05-2003 à 14:47:39
++Taz a écrit : ben |
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.
Marsh Posté le 05-05-2003 à 15:01:43
Si tu veux faire une insertion dans deux table (si j'ai bien compris ) Tu fais la premiere, puis la seconde et tu commit. Spa compliqué
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.
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. |
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.
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
Marsh Posté le 05-05-2003 à 17:10:54
++Taz a écrit : yahoooo!! merci, genre |
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.
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 :
|
voilà l'esprit du truc.
Marsh Posté le 06-05-2003 à 16:08:03
nraynaud a écrit : ayé, un gars de ma promo m'a envoyé la came :
|
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
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.
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