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

Oracle Discussion :

Alter index dans un trigger


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2003
    Messages : 25
    Points : 19
    Points
    19
    Par défaut Alter index dans un trigger
    Bonjour,

    J'aimerais modifier un index dans un trigger mais je n'arrive pas à trouver la syntax. J'essai comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE OR REPLACE TRIGGER TG_ONINSERT_DOCUMENT
    AFTER INSERT OR DELETE OR UPDATE ON T_DOCUMENT
    BEGIN
           alter index index_t_document_clob rebuild parameters(''sync'');
    END;

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Il faut faire du SQL dynamique avec EXECUTE IMMEDIATE. Voir les tutorials.

  3. #3
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Bonjour,

    Un trigger ne permet que l'exécution d'ordres DML, et pas DDL : essayez avec la syntaxe 'EXECUTE IMMEDIATE'.

    cf ce post pour plus d'infos :
    Exécution d'une commande dans un Trigger

    [Edit] grilled [/Edit]
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  4. #4
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Citation Envoyé par dadg
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE OR REPLACE TRIGGER TG_ONINSERT_DOCUMENT
    AFTER INSERT OR DELETE OR UPDATE ON T_DOCUMENT
    BEGIN
           alter index index_t_document_clob rebuild parameters(''sync'');
    END;
    Bonjour

    Je ne connais pas Oracle Text, mais est-il bien pertinent de resynchroniser l'index après chaque instruction DML ?
    Ne risquez-vous pas d'avoir des performances désastreuses si vos modifications sont fréquentes ?
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  5. #5
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    et alter index sans EXECUTE IMMEDIATE ça me parait étrange

  6. #6
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    De toute façon, il n'est pas possible d'exécuter une instruction générant une fin de transaction (commit) dans un trigger.
    Au mieux, il faudra appeler la comande dans une procedure autonome.
    Enfin, je partage tout à fait l'avis de pomalaix sur la dégradation des performances impliquée par la reconstruction abusive de l'index.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2003
    Messages : 25
    Points : 19
    Points
    19
    Par défaut
    Tout d'abbords merci pour ces informations.

    En fait j'ai une table avec des documents sous forme de clob ou de blob et j'aimerais qu'on puisse rechercher un document qui a été inséré directement après son insertion.

    Mais si vous dites que de resynchroniser l'index va reduire les performances, je vais revoir cela.

    Je développe un utilitaire de gestion de contenu pour un intranet avec environ 200 utilisateurs. L'edition des documents sera très fréquente.
    J'aimerais que la recherche soit la plus cohérente possible.

    Que me conseillez-vous de faire ?

    Une tâche programmée qui va me resynchronier l'index 2-3 fois par jour est-ce une bonne solution ?

  8. #8
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    J'ai développé une application de ce genre, mais les indexes de recherche ne sont actualisé qu'une fois par jour à l'aide j'un Job Oracle.
    Si vous avez besoin d'un raffraîchissement plus régulier, vous pourriez déclencher ce type de job 2 à 3 fois par jour.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  9. #9
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Je ne suis pas d'accord, ça ne prends pas tant de ressources que ça de resybchroniser un index oracle-text. Ca va prendre du temps si il y a des miliers de nouveaux enregistrements à traiter, mais pour un seul nouveau, c'est instantané. Je pense qu'un rhytme de resynchronisation toutes les 5 minutes est largement suportable, au final de toutes façons, ce sera les meme ressources qui seront prise puisque c'est proportionnels à la taille totale des champs textes ayant été ajoutés.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utiliser un alter table dans un trigger
    Par randriano dans le forum PL/SQL
    Réponses: 11
    Dernier message: 31/10/2008, 09h47
  2. Récupération d'index dans DBLookupControl ?
    Par Michel D. dans le forum Bases de données
    Réponses: 4
    Dernier message: 02/06/2004, 15h01
  3. RAZ GENERATOR dans un trigger
    Par kase74 dans le forum SQL
    Réponses: 2
    Dernier message: 08/09/2003, 18h43
  4. select dans un trigger sous Postgresql
    Par kastor_grog dans le forum Requêtes
    Réponses: 1
    Dernier message: 03/09/2003, 17h00
  5. [PostgreSQL] Refus de STATEMENT dans un trigger
    Par alex2205 dans le forum Requêtes
    Réponses: 3
    Dernier message: 10/03/2003, 12h51

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