IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo

FAQ PostgreSQLConsultez toutes les FAQ

Nombre d'auteurs : 5, nombre de questions : 51, dernière mise à jour : 9 septembre 2005  Ajouter une question

 

Cette FAQ a été réalisée à partir des contributions des membres du forum PostgreSQL de www.developpez.com.

Si vous désirez contribuer à l'amélioration de cette FAQ, veuillez contacter le responsable.
Commentez

SommaireSyntaxe SQL et structure de donnéesExemples d'utilisations (2)
précédent sommaire suivant
 

Dans la table matable, on doit mettre un numéro de téléphone. La colonne en question : numerotel CHAR(10). On souhaite que chaque lettre soit comprise entre '0' et '9' et que le numéro fasse exactement 10 chiffres. On peut gérer cette colonne grâce aux expressions régulières et une contrainte de valeur :

Code sql : Sélectionner tout
1
2
3
  
ALTER TABLE matable  
  ADD CONSTRAINT numerotel_check CHECK (numerotel ~ '^[0-9]{10,}$'::text);
Petite explication :
^ : pour le indiquer début de la chaine
[0-9] : Une plage de caractères de 0 à 9
{10,} : au moins 10 caractères // {10} (sans la virgule) exactement 10 caractères
$ : pour indiquer la fin

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

Mis à jour le 13 mai 2005 hpalpha

Question posé sur le forum :

Je dois remplir 2 colonnes d'une table avec ces nombres aléatoires entre 1 et 6 inclus pour la colonne 1 et entre 1 et 4 inclus pour la colonne 2.
Mais il faut qu'il y ait au maximum dans la table 4 fois le même nombre pour la colonne 1 et 6 fois le même nombre pour la colonne 2
(ce qui limite le nombre de combinaisons à 24, mais c'est justement ce qu'il me faut).

Je ne vois pas du tout comment m'y prendre en PL/SQL. Est-ce que quelqu'un pourrait me lancer sur une piste ?

Merci

Une solution :
J'ai pris le problème différemment, je crée une 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'insère dans ma table finale.

Code sql : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  
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 insères dans ta table finale  
  -- raise notice '%',latable.mavaleur;  
 END LOOP;  
 COMMIT;  
 return 0;  
end;  
$body$ 
LANGUAGE 'plpgsql' VOLATILE ;

Mis à jour le 13 mai 2005 hpalpha

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

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 © 2024 Developpez 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.