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 :

Trigger sur vue


Sujet :

PostgreSQL

  1. #1
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 31
    Points : 12
    Points
    12
    Par défaut Trigger sur vue
    Bonjour
    je cherche a faire un trigger qui me permet de tranquer tous les champs de type texte dans ma base en cas ou le donnée a insérer dépassent la langueur max du champs , du coup j'ai créer une vue qui me retourne ces champs texte

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE OR REPLACE VIEW my_view AS 
     SELECT c.column_name, c.data_type, c.character_maximum_length
       FROM information_schema.tables t
       JOIN information_schema.columns c ON t.table_name::text = c.table_name::text
      WHERE t.table_schema::text = 'public'::text AND c.data_type::text = 'character varying'::text;
     
    ALTER TABLE my_view 
      OWNER TO postgres;

    et puis j'ai créer cette fonction substring de mon trigger mais je sais pas si je suis dans le bon chemin

    Code sql : 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
    CREATE OR REPLACE FUNCTION trancage()
      RETURNS trigger AS
    $BODY$
    begin
    RAISE NOTICE 'START';
    NEW.column_name=substring (NEW.column_name for CHAR_LENGTH(column_name));
      RAISE NOTICE  'la valeur tronquée est  %',  NEW.column_name;
      return NEW; 
    end;
     $BODY$ LANGUAGE plpgsql VOLATILE
      COST 100;
    ALTER FUNCTION trancage_automatique()
      OWNER TO postgres;
     
     
     CREATE TRIGGER trigger
      BEFORE INSERT OR UPDATE
      ON ma_vue
      FOR EACH STATEMENT
      EXECUTE PROCEDURE trancage();

    avez vous une idée dans ce propos?

  2. #2
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Salut amani
    Que direz vous si...
    vous vous croyez être un mobile en déplacement rectiligne et qui se rend compte plus tard qu'il décrit un cercle.

    Vous continuerez à tourner en rond tant qu'on ne sait pas le problème (l'existant et l'objectif). Votre voie à résoudre le problème nous est totalement inutile tant que vous n'exposez pas son fondement.
    Pour vos code il y déjà deux problèmes majeurs.
    1. Il n'est pas possible de modifier les vues systèmes (information_schema.TABLES)
    2. une vue ne peut avoir un trigger before par ligne (l’existence de NEW et OLD)
      Voir ici...
      Il est dit ceci...
      Sur des vues, les triggers qui se déclenchent avant ou après peuvent être seulement définis au niveau instruction alors que les triggers qui ont un déclenchement « à la place » d'un INSERT, UPDATE ou DELETE peuvent seulement être définis au niveau ligne.
      Si vous voulez utiliser NEW et OLD vous devez utiliser INSTEAD OF

    Bref, nous avons besoin de savoir le problème: l'existant, l'objectif (si possible ne niveau en bases de données particulièrement en PostgreSQL)
    @+
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    je cherche a faire un trigger qui me permet de tranquer tous les champs de type texte dans ma base en cas ou le donnée a insérer dépassent la langueur max du champs
    Comme indiqué dans une autre réponse, c'est impossible.

    Ce type de contrôle et mise en forme des données doit être fait avant de soumettre la requête d'insertion.

Discussions similaires

  1. Trigger sur vue : problème à l'insertion
    Par edim34 dans le forum PL/SQL
    Réponses: 1
    Dernier message: 29/06/2015, 09h27
  2. [postgre] Trigger sur vue - héritage
    Par lynnaryas dans le forum PostgreSQL
    Réponses: 10
    Dernier message: 13/04/2012, 14h31
  3. Trigger sur vue avec appli dédiée
    Par havener dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/07/2009, 15h21
  4. TRIGGER sur une vue
    Par islamune9 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/09/2007, 17h32
  5. Pb Trigger sur vue
    Par cosminutza dans le forum Développement
    Réponses: 3
    Dernier message: 28/07/2003, 16h37

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