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

PostgreSQL Discussion :

nombres aleatoires en plsql


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de al85
    Profil pro
    Inscrit en
    Février 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 158
    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

  2. #2
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Janvier 2005
    Messages : 41
    Par défaut
    bonjour,
    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 :

    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

  3. #3
    Membre confirmé Avatar de al85
    Profil pro
    Inscrit en
    Février 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 158
    Par défaut
    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.

  4. #4
    Membre Expert
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Par défaut
    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 : 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
    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

  5. #5
    Membre confirmé Avatar de al85
    Profil pro
    Inscrit en
    Février 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 158
    Par défaut
    ok merci beaucoup
    mais que signifie l'instruction COMMIT ? j'en ai deja entendu parler mais sans savoir ce que ca faisait exactement

  6. #6
    Membre Expert
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Par défaut
    en fait le commit indique que l'on peut valider les changements, et par la meme occasion dropper ma table temporaire (on commit drop)

  7. #7
    Membre confirmé Avatar de al85
    Profil pro
    Inscrit en
    Février 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 158
    Par défaut
    ok merci

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

Discussions similaires

  1. nombre aleatoire (erreur maxlocksperfile...)
    Par GESCOM2000 dans le forum Access
    Réponses: 2
    Dernier message: 29/01/2006, 10h07
  2. [Deb.] Nombre aleatoire bricolage a critiquer
    Par Marc_3 dans le forum C++
    Réponses: 2
    Dernier message: 15/11/2005, 19h04
  3. Nombres aléatoires
    Par bdaboah dans le forum C
    Réponses: 10
    Dernier message: 05/10/2005, 11h04
  4. [langage] générer un nombre aléatoire gaussien
    Par kayari dans le forum Langage
    Réponses: 5
    Dernier message: 23/05/2005, 08h12
  5. nombre aleatoire
    Par Bob dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 17/06/2002, 18h12

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