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] - on update


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut [TRIGGER] - on update
    hi

    P'tit souci avec un trigger.

    version : Oracle 8.1.7.4

    soit une table A avec 2 champs C1 et C2.

    A
    ---
    C1 | C2
    ---------
    08 | blabla
    09 | blibli

    je souhaiterai faire un trigger 'on update' dynamque.

    une première tentative (qui ne fonctionne pas) mais qui résume bien mon besoin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE OR REPLACE TRIGGER TRIG_AFTUPD
    AFTER UPDATE ON A
    FOR EACH ROW
    DECLARE
    	cX VARCHAR2(2);
    BEGIN
    	cX := :old.c1 ;
    	dbms_mview.refresh("MVIEW_".cX."_BTNN") ;
    END;
    /
    SHOW ERRORS;

    une idée ? pour réaliser correctement ce que ce code exprime mais qui ne fonctionne pas...

    merci d'avance.

  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
    Par défaut
    Essayer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dbms_mview.refresh('MVIEW_.' || cX || '._BTNN') ;
    Mais on devrait pouvoir spécifier que la vue matérialisée soit mise à jour automatiquement (dans le DDL de la vue) sans avoir à utiliser un trigger.

  3. #3
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut
    voila un exemple de mon code (avec ta suggestion) et l'erreur retourné...

    Code : 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
    21
    22
    23
    24
     
    SQL> CREATE OR REPLACE TRIGGER TRIG_BRANCARD_AFTUPD
    AFTER UPDATE ON BRANCARD
    FOR EACH ROW
    DECLARE
            hop VARCHAR2(5);
    BEGIN
            hop := "00087" ;
            dbms_mview.refresh("MV_"||hop||"_BRANCARD") ;
    END;
    /
    SHOW ERRORS;  2    3    4    5    6    7    8    9   10
    Warning: Trigger created with compilation errors.
     
    SQL>
    Errors for TRIGGER TRIG_BRANCARD_AFTUPD:
     
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    4/2      PL/SQL: Statement ignored
    4/9      PLS-00201: identifier '00087' must be declared
    5/2      PL/SQL: Statement ignored
    5/21     PLS-00201: identifier 'MV_' must be declared
    S

    une idée ?

  4. #4
    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
    Par défaut
    Avec Oracle, les chaînes de caractères doivent toujours avoir des simples quotes. Si on utilise des doubles quotes, Oracle pense qu'il s'agit d'un identificateur de variable.

  5. #5
    Membre éclairé Avatar de jacquesh
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2005
    Messages : 269
    Par défaut
    oki !! merci.

    j'ai un truc qui fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    CREATE OR REPLACE TRIGGER TRIG_BRANCARD_AFTUPD
    AFTER UPDATE ON BRANCARD
    DECLARE
    	hop VARCHAR2(5) := '00087' ;
    	dest VARCHAR2(55) := 'OPS$BRANCARD.MV_' || hop || '_BRANCARD' ;
    BEGIN
    	dbms_mview.refresh(dest) ;
    END;
    /
    SHOW ERRORS;
    No errors.
    mais lors d'un update j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ERROR at line 1:
    ORA-04092: cannot COMMIT in a trigger
    ORA-06512: at "SYS.DBMS_SNAPSHOT", line 671
    ORA-06512: at "SYS.DBMS_SNAPSHOT", line 654
    ORA-06512: at "OPS$BRANCARD.TRIG_BRANCARD_AFTUPD", line 5
    ORA-04088: error during execution of trigger 'OPS$BRANCARD.TRIG_BRANCARD_AFTUPD'
    idée ?

  6. #6
    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
    Par défaut
    cannot COMMIT IN a TRIGGER
    Oracle n'accepte pas qu'un trigger exécute COMMIT. Il faut que le COMMIT soit fait en dehors du trigger => on ne peut pas appeler dbms_mview.refresh dans un trigger puisque cette procédure exécute COMMIT ...

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

Discussions similaires

  1. Trigger et update
    Par Solovely dans le forum Oracle
    Réponses: 2
    Dernier message: 03/05/2006, 17h36
  2. Trigger if update
    Par b_lob dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 20/04/2006, 14h49
  3. [8i][forms 6i] trigger PRE-UPDATE
    Par Magnus dans le forum Oracle
    Réponses: 6
    Dernier message: 21/02/2006, 11h57
  4. TRIGGER After Update
    Par Nounoursonne dans le forum Oracle
    Réponses: 8
    Dernier message: 20/07/2005, 13h33
  5. Réponses: 2
    Dernier message: 29/09/2004, 09h07

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