Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL > Requêtes
Requêtes Forum d'entraide sur les requêtes SQL spécifiques à PostgreSQL, les triggers, les vues, etc.
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 18/07/2011, 09h57   #1
Invité de passage
 
Homme
Inscription : avril 2008
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2008
Messages : 12
Points : 4
Points : 4
Par défaut Problème création trigger

Bonjour tout le monde,

Je viens vers vous pour un petit problème, enfin plutôt une requête :

Est-il possible de, au moment de l'insertion, de vérifier si un champ est correct, et sinon, de remplacer le caractère qui pose problème?

Par exemple, j'ai un champ name, et il ne faut en aucun cas que dans ce nom, il n'y ai un _ ou un accent par exemple, et je voudrais faire mon trigger de la sorte :

Code :
1
2
3
4
5
BEGIN
IF (NEW.name ilike "%\\_%") then
  SET NEW.name = REPLACE ( NEW.name , '_' , '-');
END IF;
END;
mais cela me renvoie une erreur :

Citation:
Envoyé par Erreur SQL
ERROR: syntax error at or near "$1" at character 6
Si quelqu'un connait une méthode, ou voit ce que je fais de mal ...
Merci d'avance en tout cas
frimmm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2011, 18h47   #2
Modérateur
 
Inscription : octobre 2008
Messages : 1 508
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 508
Points : 2 040
Points : 2 040
A priori ilike ne doit pas être un opérateur accepté par le language plpgsql, et par ailleurs les guillemets ne doivent pas être utilisés pour encadrer une chaine de caractères, il faut utiliser des apostrophes.

Ce IF ne sert à rien de toute manière. La ligne suivante toute seule:
Code :
NEW.name = REPLACE ( NEW.name , '_' , '-');
fera aussi bien le job.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 09h39   #3
Invité de passage
 
Homme
Inscription : avril 2008
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2008
Messages : 12
Points : 4
Points : 4
Merci estofilo pour ta réponse, en fait ce qui est préférable c'est que je remonte une exception pour mes utilisateurs, du coup avec un simple

Code :
1
2
3
IF NEW.ident ilike '%\\_%' THEN
            RAISE EXCEPTION 'L\'identifiant ne doit pas contenir de \'_\'';
END IF
ça marche très bien!

Par contre deuxième petite question, savez vous si il existe, en pl/sql, une fonctions générique qui pourrait me permettre de remonter une exception aussi, mais pour tout les caractères spéciaux ? ( tous les accents, ç et autres bizarrerie des gens quoi :p )

Merci d'avance en tout cas, et bonne journée
frimmm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 10h27   #4
Invité de passage
 
Homme
Inscription : avril 2008
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2008
Messages : 12
Points : 4
Points : 4
réponse à moi même si ça peut intéresser quelqu'un ...

Code :
1
2
3
IF NEW.ident SIMILAR TO  '%[ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïñòóôõöùúûüýÿ]%' THEN
              RAISE EXCEPTION 'L\'identifiant ne doit pas contenir d\'accents';
END IF;
Merci pour ceux qui on passé du temps à me lire
frimmm 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 13h04.


 
 
 
 
Partenaires

Hébergement Web