Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
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 28/03/2005, 22h23   #1
Membre régulier
 
Avatar de al85
 
Inscription : février 2004
Messages : 157
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 157
Points : 88
Points : 88
Par défaut nombres aleatoires en plsql

bonjour

comment peut on génerer des nombres aleatoires ?
je dois remplir 2 champs d'un table avec ces nombres aleatoires entre 1 et 6 inclus pour le champ 1 et entre 1 et 4 inclus pour le champ 2.
mais il faut qu'il y ait au maximum dans la table 4 fois le meme nombre pour le champ 1 et 6 fois le meme nombre pour le champ 2 (ce qui limite le nombre de combinaisons a 24, mais c'est justement ce qu'il me faut)

je ne vois pas du tout comment m'y prendre en plsql, est ce que quelqu'un pourrait me lancer sur une piste ?

merci
al85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2005, 01h59   #2
Membre à l'essai
 
Inscription : janvier 2005
Messages : 38
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : janvier 2005
Messages : 38
Points : 24
Points : 24
Envoyer un message via MSN à moog
bonjour,
Citation:
comment peut on génerer des nombres aleatoires ?
pour ce genre de question
rien de mieux que la doc

la fonction random() : valeur au hasard entre 0.0 et 1.0
la fonction round() : arrondi à l'entier le plus proche

pour avoir un nombre entre 1 et 6 tu peux donc faire quelque chose comme ca :

Citation:
mais il faut qu'il y ait au maximum dans la table 4 fois le meme nombre pour le champ 1 et 6 fois le meme nombre pour le champ 2 (ce qui limite le nombre de combinaisons a 24, mais c'est justement ce qu'il me faut)
Dans ce cas tu devrai utiliser une procédure stockée en plpgsql par exemple
moog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2005, 07h44   #3
Membre régulier
 
Avatar de al85
 
Inscription : février 2004
Messages : 157
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 157
Points : 88
Points : 88
oui, mais mon probleme est que je sais pas comment faire pour conserver (le temps de l'execution de la procedure) le nombre de fois que chaque chiffre est apparu pour le pas le remettre si on a atteint le nombre d'utilisations maximal, et si possible sans utiliser trop de variables.
al85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2005, 13h30   #4
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
J'ai pris le probleme differement, je cree un table temporaire qui contient toutes mes valeurs possibles :
1,1,1,1,2,2,2,2,3...........6,6,6,6
et je fait un order by random dessus, je parcours ma table et j'inserre dans ma table finale
en gros ca donnerai :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE OR REPLACE FUNCTION "public"."test" () RETURNS integer AS'
declare
 i int2;
 j int2;
 latable RECORD;
begin
 CREATE TEMPORARY TABLE listevaleurs (mavaleur int2) ON COMMIT DROP;
 FOR j IN 1..6 LOOP
  FOR i IN 1..4 LOOP
   INSERT INTO listevaleurs VALUES (j);
  END LOOP;
 END LOOP;
 
 FOR latable IN SELECT mavaleur FROM listevaleurs ORDER BY random() LOOP
  -- ici tu insere dans ta table finale
  -- raise notice ''%'',latable.mavaleur;
 END LOOP;
 COMMIT;
 return 0;
end;
'LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
apres tu peux adapter pour ton 2eme champ
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2005, 14h03   #5
Membre régulier
 
Avatar de al85
 
Inscription : février 2004
Messages : 157
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 157
Points : 88
Points : 88
ok merci beaucoup
mais que signifie l'instruction COMMIT ? j'en ai deja entendu parler mais sans savoir ce que ca faisait exactement
al85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2005, 14h21   #6
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
en fait le commit indique que l'on peut valider les changements, et par la meme occasion dropper ma table temporaire (on commit drop)
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2005, 19h07   #7
Membre régulier
 
Avatar de al85
 
Inscription : février 2004
Messages : 157
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 157
Points : 88
Points : 88
ok merci
al85 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 15h23.


 
 
 
 
Partenaires

Hébergement Web