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

SQL Oracle Discussion :

Trigger pour un index


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 45
    Par défaut Trigger pour un index
    Bonjour
    je veux faire la mise à jour mon index, aprés chaque insertion dans la table,
    le code est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE OR REPLACE TRIGGER TRIGER11
    AFTER INSERT ON TABLE1
    FOR EACH ROW
    BEGIN
    ALTER INDEX REBUILD ONLINE;
    END;
    /
    il me rend une erreur au début de ALTER
    ou est ma fauteeee

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Votre index se met déjà à jour tout seul !

    Le rebuild est une opération de maintenance, qui n'a rien à faire dans un trigger.

  3. #3
    Membre chevronné Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Votre index se met déjà à jour tout seul !

    Le rebuild est une opération de maintenance, qui n'a rien à faire dans un trigger.
    +1 !

    A la question de départ, à savoir pourquoi une erreur, c'est parce que l'instruction "ALTER INDEX..." est un ordre DDL, et que ces ordres sont interdits dans un bloc PL/SQL. Si on en a vraiment besoin, il faut les "cacher" dans un SQL dynamique :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    EXECUTE IMMEDIATE 'un ordre ddl...';
    Attention, les ordres DDL exécutent un COMMIT implicite avant de s'exécuter. Dans un trigger cela risque fort de poser problème.

  4. #4
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 45
    Par défaut
    Merci bcp pour vos réponses
    1- Mon index ne se met pas à jour automatqmt, car aprés que j'ai faits 2 autres insertions, mes requetes SQL ne me ramene des données que du premier enregistrement.
    Mais si je le rafraichie manuellement, il les prends en charge.
    2- Je vais essayer avec EXECUTE IMMEDIATE...

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Avez-vous fait un COMMIT après votre insert ?

    Un indice discret ce cache dans ce post quant à la marche à suivre.

  6. #6
    Membre chevronné Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Par défaut
    Question peut-être bête : il ne manquerait pas simplement un COMMIT ?
    Si tu fais tes INSERT dans une session, les données ne sont visibles dans une autre session qu'après COMMIT. Le fait de reconstruire l'index fait un COMMIT, c'est peut-être simplement ça qui résout ton problème.

  7. #7
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 45
    Par défaut
    DSl
    j'ai changé comme ça, mais ça n'a pas marché
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE OR REPLACE TRIGGER TRIGER11
    AFTER INSERT ON TABLE1
    FOR EACH ROW
    Begin
    EXEUTE IMMEDIATE INDEX monIndex REBUILD ONLINE;
    End;
    Mais il me signale tjrs Erreur syntaxique sur le mot "ALTER", comme si il n'accepte pas ça.
    Pour le COMMIT: je le fait aprés chaque insertion.

Discussions similaires

  1. Erreur sur champ text pour un index Full-Text
    Par Steph82 dans le forum Outils
    Réponses: 5
    Dernier message: 06/01/2011, 14h08
  2. TRIGGER pour des suppression en CASCADE
    Par softflower dans le forum Développement
    Réponses: 2
    Dernier message: 12/12/2005, 14h58
  3. petit conseil pour les index
    Par fpouget dans le forum Langage SQL
    Réponses: 11
    Dernier message: 10/12/2005, 04h39
  4. Trigger pour faire une table "mirroir"
    Par lgomez dans le forum Oracle
    Réponses: 8
    Dernier message: 26/10/2005, 13h12

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