IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

afficher currval après requête d'insertion [Oracle]


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Points : 3
    Points
    3
    Par défaut afficher currval après requête d'insertion
    Bonjour,

    J'ai créé un formulaire pour l'insertion d'un nouveau client dans ma base de données. Pour le numéro du client, j'ai à ma disposition la séquence "SEQ_NEWCUST".
    L'insertion marche très bien, mais je voudrais pouvoir récupérer le numéro créé par la séquence, pour l'afficher sur ma page et ensuite l'utiliser pour un autre script.

    Voilà un bout du script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // insertion client
    $stmt=oci_parse($conn, "INSERT INTO CUSTOMERS
    VALUES (SEQ_NEWCUST.NEXTVAL,'$nom_clt','$adresse','$contact','$cp','$ville','$province','$pays','','','','','$tel','$gsm','$langue','$mail','','','','','','','')") or die ("erreur dans la requête d'insertion");
    oci_execute($stmt,OCI_DEFAULT);
     
    // recherche du nouvel id (CUST_ID est le champ qui a été remplit par la séquence ci dessus)
    $stmt2=oci_parse($conn, "SELECT CUST_ID FROM CUSTOMERS WHERE CUST_ID=SEQ_NEWCUST.CURRVAL") or die ("erreur dans la requête de selection");
    oci_execute($stmt2,OCI_DEFAULT);
    Et voici l'erreur :
    ORA-02287: sequence number not allowed here, faisant référence à la ligne "oci_execute($stmt2,OCI_DEFAULT);".
    J'ai fais des recherches, et me suis rendue compte que l'utilisation de currval dans une clause where est interdite. Mais je ne vois pas d'autres solutions pour récupérer le numéro que la séquence vient d'attribuer au client.

    Merci d'avance pour votre aide.

  2. #2
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    essaie la requête
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SEQ_NEWCUST.CURRVAL FROM dual

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Eusebe, merci pour la réponse ;D

    Je n'ai effectivement plus de message d'erreur, mais je ne sais pas vraiment comment récupérer la valeur, et la passer dans un attribut pour une utilisation future.

    Je ne sais pas quelle fonction utiliser, oci_fetch_assoc, quelque chose d'autre ? Je suis novice avec les fonctions Oracle (ayant bossé pendant quelques années avec celles de MySQL), et je ne sais pas laquelle utiliser pour retourner un seul et unique résultat.

  4. #4
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par Laera Voir le message
    Je ne sais pas quelle fonction utiliser, oci_fetch_assoc, quelque chose d'autre ? Je suis novice avec les fonctions Oracle (ayant bossé pendant quelques années avec celles de MySQL), et je ne sais pas laquelle utiliser pour retourner un seul et unique résultat.
    Tu peux utiliser l'une des fonctions oci_fect_all, oci_fetch_array, oci_fetch_assoc, oci_fetch_object, ou oci_fetch_row, toutes fonctionneront.

    oci_fetch_all est peut-être la moins adaptée, puisqu'elle permet de récupérer toutes les lignes de la requête, et ajoute donc un niveau 'numéro d'enregistrement' dans le résultat retourné.

    Pour les autres, c'est en fonction de tes habitudes : tu préfères travailler avec un tableau simple (_row), un tableau associatif (_assoc), un objet (_object) ?

    Un exemple avec oci_fetch_assoc (puisque tu parlais de cette fonction) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    oci_execute ($stmt2, OCI_DEFAULT);
    $row = oci_fetch_assoc ($stmt2);
    echo $row['CURRVAL'];

  5. #5
    Candidat au Club
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup, je viens de tester et ça marche parfaitement. Désolée pour la réponse tardive !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [phpMyAdmin] "Chargement en cours" reste affiché après requête
    Par FrankOVD dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 19/12/2012, 16h33
  2. [MySQL] Afficher un enregistrement spécifique après requête via Get sur URL
    Par Emilie91 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 30/08/2012, 22h08
  3. [PDO] requete prepare() avec récupération d'id AI après requête insert
    Par HoliCApplet dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 08/08/2012, 14h50
  4. Réponses: 12
    Dernier message: 29/11/2011, 16h06
  5. [SQL] Les caractère accentués s'affichent mal après une requête SQL
    Par sayerh dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/03/2008, 11h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo