PHP et Oracle

PHP et Oracle - PHP - Programmation

Marsh Posté le 21-01-2009 à 17:49:24    

Bonjour,
je fais des insertions dans une table oracle
avec une clé primaire automatique : un trigger qui la prend dans une séquence
je voudrais récupérer l'id généré (un peu dans le genre de mysql_insert_id)
MERKI  :jap:

Reply

Marsh Posté le 21-01-2009 à 17:49:24   

Reply

Marsh Posté le 22-01-2009 à 08:56:28    

bon j ai une sequence et un trigger pour simuler lle auto increment  
Help Help

Reply

Marsh Posté le 22-01-2009 à 09:27:16    

Si c'est une séquence, on peut obtenir le numéro en cours en faisant

select une_sequence.currval from dual;

Reply

Marsh Posté le 22-01-2009 à 09:47:23    

ouep mais si j ai des insertions concurrentes ?
y a probleme , je risque d avoir l id d un autre enregistrement?

Reply

Marsh Posté le 22-01-2009 à 09:55:36    

Très bonne remarque. C'est pour cela que dans de nombreuses entreprises où j'ai travaillé, on utilisait une table à part, avec un champ conservant un numéro, qui simulait une séquence. Mais c'était avec des vieilles versions d'Oracle. Peut-être qu'il y aurait une astuce avec les nouvelles versions, en dehors des curval et nextval de base. Je ne sais pas.

Reply

Marsh Posté le 22-01-2009 à 12:58:40    

schum-hacker a écrit :

ouep mais si j ai des insertions concurrentes ?
y a probleme , je risque d avoir l id d un autre enregistrement?


à mon ex boulot, on avait une séquence par table, comme ça pas de risque d'ambiguité


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-01-2009 à 16:00:06    

masequence.currval retourne la dernière valeur générée par masequence.nextval dans LA session en cours.
 
Faites le test pour voir.
 
Même si une autre session fait un masequence.nextval, pour la première session masequence.currval ne change pas.
 
D'ailleurs, masequence.currval n'est pas défini dans la première session avant une lecture de  masequence.nextval !
 
M'enfin autant faire les choses bien :
 
1- Une séquence par table ! Par exemple SEQ_NomDeTable.
2- Pas de "clé primaire automatique avec un trigger", mais :

Code :
  1. INSERT INTO MA_TABLE ( SEQ_MA_TABLE.NEXTVAL, 'TOTO', 35, ... )


3- Si on veut la valeur de l'ID, on le récupère avant:  

Code :
  1. SELECT SEQ_MA_TABLE.NEXTVAL FROM DUAL


et on s'en sert ensuite pour l'INSERT.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Sujets relatifs:

Leave a Replay

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