2010-02-10 7 views
1

Je travaille actuellement sur un projet PHP avec une base de données Oracle. Pour mettre à jour une table, le code php avec lequel je travaille utilise une méthode SQL "MERGE INTO" pour faire une boucle dans une table et voir si les valeurs de plusieurs enregistrements existent dans une autre table. Si elles n'existent pas encore, les valeurs sont insérées dans ma table. Si les valeurs existent déjà, rien ne se passe.PHP/Oracle, retournant les ID insérés de Merge Into

Je voudrais exécuter une autre requête après celle-ci qui utilise les identifiants auto-incrémentés créés dans la requête MERGE INTO. Est-il possible d'obtenir un tableau des identifiants nouvellement créés? J'espérais quelque chose comme mysql_insert_id, mais je n'ai encore rien trouvé de tel.

Merci!

Répondre

1

Oracle has supported the MERGE syntax since 9i. N'a pas essayé, mais vous pourriez être en mesure d'utiliser la clause RETURNING sur l'instruction MERGE ...

Oracle uses sequences for handling automatically incremented values. Une fois que vous avez créé une séquence, vous pouvez utiliser:

sequence_name.CURVAL 

..pour obtenir la valeur actuelle, comme ce que mysql_insert_id retournerait. Pour remplir une clé primaire, vous pouvez utiliser:

sequence_name.NEXTVAL 

Pour remplir une primaire dans une instruction INSERT, vous pouvez utiliser:

INSERT INTO your_table 
    (pk_id, .. 
VALUES 
    (your_sequence.NEXTVAL, ...) 

Vous pouvez utiliser des déclencheurs comme une alternative, mais ils ont gagné ne retourne pas la valeur actuelle.

+0

Terminé avec des déclencheurs. Merci! – Jake

0

Quels id_incremented? AFAIK, Il n'y a pas une telle chose dans Oracle. Vous pouvez simuler le comportement en ajoutant un trigger sur la table et un numéro de séquence mais il n'y a certainement pas d'équivalent de mysql_insert_id(). Je pense que vous devez revenir en arrière et trouver un autre moyen d'identifier vos dossiers.

C.

Questions connexes