Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & Oracle
PHP & Oracle Forum d'entraide sur Oracle avec PHP. Avant de poster -> FAQ Oracle et Cours Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/12/2010, 09h08   #1
Candidat au titre de Membre du Club
 
Mialy Elodie Rakotondrazafy
Inscription : novembre 2010
Messages : 47
Détails du profil
Informations personnelles :
Nom : Mialy Elodie Rakotondrazafy
Âge : 25
Localisation : Madagascar

Informations forums :
Inscription : novembre 2010
Messages : 47
Points : 10
Points : 10
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 :
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 :
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.
mialy.rakot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 09h43   #2
Membre éclairé
 
Inscription : août 2007
Messages : 360
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 360
Points : 334
Points : 334
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
mathieu44800 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 11h58   #3
Candidat au titre de Membre du Club
 
Mialy Elodie Rakotondrazafy
Inscription : novembre 2010
Messages : 47
Détails du profil
Informations personnelles :
Nom : Mialy Elodie Rakotondrazafy
Âge : 25
Localisation : Madagascar

Informations forums :
Inscription : novembre 2010
Messages : 47
Points : 10
Points : 10
Merci pour ton aide.
En effet c'était au niveau des substr qu'il y avait erreur, j'aurais dû mettre
Code :
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
mialy.rakot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 12h45   #4
Membre éclairé
 
Inscription : août 2007
Messages : 360
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 360
Points : 334
Points : 334
tag [Résolu] ?
mathieu44800 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h24.


 
 
 
 
Partenaires

Hébergement Web