Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour 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 24/05/2011, 21h35   #1
Membre à l'essai
 
Inscription : mars 2004
Messages : 122
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 122
Points : 20
Points : 20
Par défaut Forcer cinq chiffres dans un varchar2

Bonjour,

Je dois valider que mon champ est entre 00000 et 00999 mais je dois garder les 5 digits. Donc 15 n'est pas permis, c'est 00015. Aussi les décimales ne sont pas permises.

j'imagine que je peux utiliser un Mask mais je vois pas trop comment. Pouvez-vous m'aider svp.

merci
juin29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 08h26   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 001
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 001
Points : 18 262
Points : 18 262
Envoyer un message via MSN à CinePhil
Puisque tu as obligatoirement 5 digits, commence par changer le type en CHAR(5).

Quel est ton SGBD ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 14h46   #3
Membre à l'essai
 
Inscription : mars 2004
Messages : 122
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 122
Points : 20
Points : 20
Bonjour,

Il m'est impossible de changer le type malheureusement. Il faut que je puisse le valider via un package qui valide le contenu de la table temporaire avant de l'insérer dans une table finale.

En fait je fais un update d'une colonne statut dans ma table temporaire qui me dit si l'enregistrement est accepté ou rejeté. Pour se faire je fais un update du style :

Code :
1
2
3
4
5
6
 
 
UPDATE table_temp
SET statut='rejeter'
WHERE champ_a_valider > '00001'
AND champ_a_valider < '00999'
mais ca ne fonctionne pas comme il le faudrait...

merci
juin29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 14h47   #4
Membre à l'essai
 
Inscription : mars 2004
Messages : 122
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 122
Points : 20
Points : 20
oups, j'ai oublié de dire que je suis en oracle 10g
juin29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 14h53   #5
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 434
Points : 10 434
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Quelque chose comme ceci :
Code :
1
2
3
4
5
UPDATE table_temp
   SET statut = 'rejeter'
 WHERE champ_a_valider NOT BETWEEN '00000' AND '00999'
    OR TRANSLATE(champ_a_valider, '#0123456789', '#') IS NOT NULL
    OR length(champ_a_valider) <> 5;
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 16h02   #6
Membre à l'essai
 
Inscription : mars 2004
Messages : 122
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 122
Points : 20
Points : 20
ha évidemment, j'avais pas pensé à quelques chose du genre...
je vais travailler en ce sens...
juin29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 10h00   #7
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 925
Points : 4 547
Points : 4 547
Citation:
Envoyé par Waldar Voir le message
Code :
1
2
3
 WHERE champ_a_valider NOT BETWEEN '00000' AND '00999'
    OR TRANSLATE(champ_a_valider, '#0123456789', '#') IS NOT NULL
    OR length(champ_a_valider) <> 5;
Pour ceux qui sont fan de regexp
Code :
regexp_like(x,'^00\d{3}$')
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/05/2011, 15h14   #8
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 437
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 437
Points : 4 173
Points : 4 173
Code :
OR TRANSLATE(champ_a_valider, '#0123456789', '#') IS NOT NULL
Préférer (plus rapide)
Code :
LTRIM(champ_a_valider, '0123456789') IS NOT NULL
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 30/05/2011, 15h43   #9
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 434
Points : 10 434
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
C'est vrai, bien vu !
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2011, 16h48   #10
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Citation:
Envoyé par McM Voir le message
Code :
LTRIM(champ_a_valider, '0123456789') IS NOT NULL
J'adore
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2011, 17h48   #11
Membre à l'essai
 
Inscription : mars 2004
Messages : 122
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 122
Points : 20
Points : 20
On en apprend tout les jours avec vous

merci ça devrait régler mon problème!!
juin29 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 15h18.


 
 
 
 
Partenaires

Hébergement Web