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 :

Autoincrémentation de données dans une table [Oracle]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Madagascar

    Informations forums :
    Inscription : Novembre 2010
    Messages : 47
    Points : 24
    Points
    24
    Par défaut Autoincrémentation de données dans une table
    Bonjour tout le monde,
    j'ai un problème sur l'incrémentation d'une donnée dans ma base de données.
    Notre chef a voulu changé le format d'une entrée dans la base de données pour que les utilisateurs ne puissent entrer n'importe quoi.
    Du coup, cette référence repose sur plusieurs choses
    1-La première partie repose sur la clé (4 chiffres)
    2-La deuxième partie repose sur la date du jour à l'envers
    3-La dernière partie est un compteur sur 2 chiffres
    Tout ceci donne par exemple comme référence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    7000_2010-12-21_01
    A chaque insertion sur la clé, le compteur s'incrémente et peut atteindre 99 chaque jour.
    J'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $req = "SELECT REFERENCE FROM NOTE WHERE CLE ='".$_POST['cle']."'";
    			$s_req = oci_parse($ora_conn,$req);
    			oci_execute($s_req);
    			$debut = substr($reference,0,9);
    			$milieu = substr($reference,9,8);
    			$fin = substr($reference,17);
    			while($row=oci_fetch_array($s_req,OCI_NUM))
    			{
    			if($reference == $row[0])
    			{
    			$fin = $fin + 1;
    			$reference = $debut.$milieu.$fin;
    			}
    			}
    			else
    			{
    			$reference = $reference;
    			}
    			}
     
    			oci_free_statement($s_req);
    Mais à la troisième enregistrement, il y a erreur, violation de la clé primaire. Je ne peux pas utiliser les triggers ni les séquences puisqu'avant il y a des références que les utilisateurs ont entré et qui n'ont pas le même schéma que la nouvelle référence.
    Merci d'avance pour votre aide.

  2. #2
    Membre averti
    Inscrit en
    Août 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 360
    Points : 396
    Points
    396
    Par défaut
    Bonjour,

    un petit var_dump() de tes varaibles $debut, $milieu et $fin dans ta boucle pour vérifier ce que tu mets dans tes variables car je ne suis pas sur que tes substr() te renvoient ce qu'il faut ?

    cdt,

    Mathieu

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Madagascar

    Informations forums :
    Inscription : Novembre 2010
    Messages : 47
    Points : 24
    Points
    24
    Par défaut
    Merci pour ton aide.
    En effet c'était au niveau des substr qu'il y avait erreur, j'aurais dû mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    $req = "SELECT REFERENCE FROM NOTE WHERE REFERENCE = (SELECT MAX(REFERENCE) FROM NOTE WHERE CLE ='".$_POST['cle']."' AND DATEREDACTION = To_Date(SYSDATE,'DD/MM/YY'))";
    			$s_req = oci_parse($ora_conn,$req);
    			oci_define_by_name($s_req,"REFERENCE",$nte_reference);
    			oci_execute($s_req);
    			while(oci_fetch($s_req))
    			{
    				$debut = substr($nte_reference,0,9);
    				$milieu = substr($nte_reference,9,8);
    				$fin = substr($nte_reference,17);
    				if($nte_reference != $reference)
    				{
    			       $fin = $fin + 1;
    				   $reference = $debut.$milieu.$fin;
    			    }
    				else
    				{
    					$reference = $reference;
    				}
    			}
                oci_free_statement($s_req);
    Merci beaucoup

  4. #4
    Membre averti
    Inscrit en
    Août 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 360
    Points : 396
    Points
    396
    Par défaut
    tag [Résolu] ?

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

Discussions similaires

  1. Problème de récupérations de données dans une table mysql
    Par Helpine dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 09/03/2006, 19h07
  2. Réponses: 3
    Dernier message: 07/02/2006, 13h26
  3. [MySQL] Modifier une donnée dans une table
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 27
    Dernier message: 02/02/2006, 13h25
  4. Inserer des données dans une table access SQL
    Par ouellet5 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 23/11/2005, 21h11
  5. Réponses: 2
    Dernier message: 15/06/2005, 17h32

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