La FAQ de PostgreSQLConsultez toutes les FAQ

Nombre d'auteurs : 7, nombre de questions : 51, dernière mise à jour : 8 juillet 2009 

 
OuvrirSommaireSyntaxe SQL et structure de donnéesExemples d'utilisations

Dans la table matable, on doit mettre un numéro de téléphone. Le champ en question : numerotel CHAR(10) On souhaite que chaque lettre doit être comprise en '0' et '9' et que le numéro fait exactement 10 chiffres. On peu géré ce champ grâce aux expressions régulières et la contrainte de valeur :

 
Sélectionnez

ALTER TABLE matable 
  ADD CONSTRAINT numerotel_check CHECK (numerotel ~ '^[0-9]{10,}$'::text); 

Petite explication :
^ : pour le indiquer debut de la chaine
[0-9] : Une plage de caractères de 0 à 9
{10,} : au moins 10 caracteres // {10} (sans la virgule) exactement 10 caracteres
$ : pour indiquer la fin


pour plus d'info : www.google.fr
mots clefs :
-expressions régulières
-regex

Créé le 2005-05-13  par Damien Griessinger (HpAlpha)

Question posé sur le forum :

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

Une solution :
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 fais un order by random dessus, je parcours ma table et j'inserre dans ma table finale

 
Sélectionnez

CREATE OR REPLACE FUNCTION "public"."testrandom" () RETURNS integer AS
$body$ 
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; 
$body$
LANGUAGE 'plpgsql' VOLATILE ;
Créé le 2005-05-13  par Damien Griessinger (HpAlpha)
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette page est déposée.