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 :

Erreur dans corps du trigger !


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Par défaut Erreur dans corps du trigger !
    bonjour,
    j'essaie de créer un utilisateur dans un trigger suite à une insertion dans une table.
    je récupère une erreur lors de l'insertion dans la table dû au trigger mais je ne vois pas c'est quoi au juste
    PS: l'utilisateur qui exécute ceci à le droit de créer des utilisateur!
    le voila mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    create or replace trigger a
    before insert on COMPTE
    for each row
    declare 
    begin
    EXECUTE IMMEDIATE 'CREATE USER '|| :new.nom_c||' IDENTIFIED BY '||:new.pwd_c 
    				|| 'Default tablespace ts_tables Quota 5M on ts_tables'
    				||' Temporary tablespace ts_temp  Quota 10M on ts_temp';
    EXECUTE IMMEDIATE 'grant create session to '|| :new.nom_c;
    end
    ;
    /
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    insert into compte values(3,'sara','sara','nulpart','sara@live.fr','sara',0,'p');
    l'erreure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ERREUR à la ligne 1 :
    ORA-04098: Déclencheur  'ADMIN_BIB.CONN_USER' non valide. Echec de la
    revalidation
    Merci de bien vouloire m'aider

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Quelle est la règle N°1 quand on code de l'execute immediate ?

    Réponse : Toujours AFFICHER la chaine exécutée et vérifier que la requête est correcte.

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Par défaut
    le fais dans les autres languages, pas encore de bonnes manières en pl/sql

    maintenant je l'ai essayé comme ceci ( j'espére ne pas avoir commis de bétises)

    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
     
    set serveroutput on;
    create or replace trigger a
    before insert on COMPTE
    for each row
    declare 
    tst1 varchar2(400);
    tst2 varchar2(50);
    begin
    tst1 :='CREATE USER '|| :new.nom_c||' IDENTIFIED BY '||:new.pwd_c 
    				|| 'Default tablespace bib1_tables Quota 5M on bib1_tables'
    				|| ' Temporary tablespace bib_temp  Quota 10M on bib_temp';
    dbms_output.put_line(tst1);
    tst2 :='grant create session to '|| :new.nom_c;
    dbms_output.put_line(tst2);
    end
    ;
    /
    et ça retourne toujours la même erreure!

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Ça ne va pas aller: create user c’est du DDL et le DDL commit, ce qui n’est pas permis pour le trigger sauf s’il s’exécute dans une transaction autonome; mais ça montre souvent une incompréhension des triggers et transactions autonomes.
    Utilisez donc DBMS_JOB via le trigger pour créer votre utilisateur !

  5. #5
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Il manque un espace devant 'default tablespace'

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Garuda Voir le message
    Il manque un espace devant 'default tablespace'
    Visiblement l'erreur est au niveau compil du trigger et pas de l'exécution (Déclencheur 'ADMIN_BIB.CONN_USER' non valide)
    Faire un show errors après la compil pour vérifier les erreurs.
    Chez moi il se compile bien (en mettant des valeurs de colonne des :new correspondant à ma table compte).

  7. #7
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 462
    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 462
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Utilisez donc DBMS_JOB via le trigger pour créer votre utilisateur !
    Pour moi, avoir des opérations non transactionnelles ou asynchrones dans un déclencheur DML est une hérésie.
    Il me paraît nettement plus propre de créer une procédure creer_compte, qui se chargera de créer le compte si nécessaire, et de l'insérer dans la table.

  8. #8
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par Pomalaix Voir le message
    Pour moi, avoir des opérations non transactionnelles ou asynchrones dans un déclencheur DML est une hérésie.
    Il me paraît nettement plus propre de créer une procédure creer_compte, qui se chargera de créer le compte si nécessaire, et de l'insérer dans la table.
    Ca reste toujours discutable. Je pense que le plus important est de bien comprendre qu’elles sont les implications. Ensuite le choix de la solution pourrait dépendre des autres contraintes.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 05/05/2011, 10h37
  2. Erreur dans mon trigger ?
    Par Metalyn dans le forum PL/SQL
    Réponses: 3
    Dernier message: 11/02/2008, 21h27
  3. [Trigger] Génération d'erreurs dans un trigger
    Par gilder89 dans le forum Développement
    Réponses: 5
    Dernier message: 10/04/2007, 13h02
  4. Erreur dans TRIGGER
    Par taroudant dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 02/08/2006, 15h31
  5. Gestion des erreurs dans un TRIGGER
    Par SDU64 dans le forum DB2
    Réponses: 1
    Dernier message: 18/05/2006, 10h51

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