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

  FORUM HardWare.fr
  Programmation
  PHP

  PHP et Oracle

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PHP et Oracle

n°1841255
Schum-hack​er
Posté le 21-01-2009 à 17:49:24  profilanswer
 

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:

mood
Publicité
Posté le 21-01-2009 à 17:49:24  profilanswer
 

n°1841411
Schum-hack​er
Posté le 22-01-2009 à 08:56:28  profilanswer
 

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

n°1841416
olivthill
Posté le 22-01-2009 à 09:27:16  profilanswer
 

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

select une_sequence.currval from dual;

n°1841422
Schum-hack​er
Posté le 22-01-2009 à 09:47:23  profilanswer
 

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

n°1841425
olivthill
Posté le 22-01-2009 à 09:55:36  profilanswer
 

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.

n°1841549
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 22-01-2009 à 12:58:40  profilanswer
 

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)
n°1842130
Mara's dad
Yes I can !
Posté le 23-01-2009 à 16:00:06  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  PHP et Oracle

 

Sujets relatifs
Connexion PHP/Oracle[PHP] oracle et paramètre de type date ( ou alors sysdate ;) )
Oracle et PHP[ORACLE RESOLU] Insertion dans CLOB en PHP
Oracle PHP - create tablePHP - Oracle - create table
[ORACLE/PHP] Disparition champs NULL dans mon resultsetoracle/mysql et php comment acceder à une base (oracle ) à "distance"?
Besoin d'aide pour un exposé (oracle, sqlserver, php, JS, perl et asp)liste déroulante dynamique + oracle + php
Plus de sujets relatifs à : PHP et Oracle


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