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 :

Afficher un message à l'utilisateur après connexion.


Sujet :

Oracle

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 98
    Points : 64
    Points
    64
    Par défaut Afficher un message à l'utilisateur après connexion.
    Bonjour, je suis un débutant avec Oracle.
    J'ai un projet de classe sur la gestion d'un petit hôpital à faire sur Oracle. J'ai réussit à créer toutes mes tables, mais mon souci est sur un trigger.
    Ce trigger doit permettre d'afficher un message à l'utilisateur qui se connecte à la base de donnée via sqlplus.
    Après avoir effectué quelques recherches, voici le code que j'ai pu produire:
    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
     
    CREATE OR REPLACE TRIGGER message_bienvenue
    	AFTER LOGON ON DATABASE
    	DECLARE
    		user_name VARCHAR2(40);
    		nbre_patient NUMBER;
            BEGIN
                SELECT sys_context('USERENV', 'SESSION_USER') INTO user_name FROM dual;
                SELECT COUNT(*) INTO nbre_patient FROM patient
                    INNER JOIN hospitalisation ON patient.numPatient = hospitalisation.numPatient
                    WHERE hospitalisation.etat = 1;
                IF (nbre_patient > 0) THEN
                    dbms_output.put_line('Bonjour' ||user_name|| ', vous avez ' || nbre_patient || 'hospitalisé(s).');
                ELSE
                    dbms_output.put_line('Bonjour' ||user_name|| ', vous n avez auncun hospitalisé.');
                END IF;
            END;
    /
    J'utilise Oracle 11g sur Windows 10.
    Merci d'avance pour l'aide.

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 98
    Points : 64
    Points
    64
    Par défaut
    J'oubliais, voici l'erreur que je reçois:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    Elément Trigger MESSAGE_BIENVENUE compilé
     
    LINE/COL  ERROR
    --------- -------------------------------------------------------------
    4/13      PL/SQL: SQL Statement ignored
    5/28      PL/SQL: ORA-00942: table or view does not exist
    Erreurs : consulter le journal du compilateur
    Pourtant toutes les tables existent. J'utilise SQL Developper 19.

  3. #3
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Tu peux avoir ce message si les tables existent mais que le user faisant un SELECT n'a pas les droits sur celles-ci : pour lui, ces tables n'existent pas!

    As-tu testé avec le user déclenchant le trigger? Par exemple si tu testes avec le user TEST01, désactive le trigger, connecte toi comme TEST01 et fait sous SQL*Plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT COUNT(*) FROM patient;
    SELECT sysdate FROM dual;
    Que se passe-t-il?
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 98
    Points : 64
    Points
    64
    Par défaut
    Bonsoir, vous avez raison. La table "patient" n'est pas accessible au user "system".
    J'ai pu créer le trigger. Merci.
    Mais par contre le message ne s'affiche pas à la connexion à la base de donnée via sqlplus. Et pourtant j'ai activé le trigger.

  5. #5
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Essaye de faire un dbms_output.put_line sous SQL*Plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec dbms_output.put_line('Bonjour');
    Si cela ne marche pas, fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set serveroutput on
    exec dbms_output.put_line('Bonjour');
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 98
    Points : 64
    Points
    64
    Par défaut
    Bonsoir. Merci pour votre retour.
    Le message "bonjour" ne s'affiche que si je fais dans cet ordre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    set serveroutput on
    exec dbms_output.put_line('Bonjour');
    Je me suis déconnecté et reconnecté après. Lorsque je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    exec dbms_output.put_line('Bonjour');
    le "bonjour" ne s'affiche pas.

  7. #7
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Donc c'est normal, tu n'as pas activé le paramètre qui gère les écritures vers l'écran en PL/SQL.

    Extrait d'un bouquin :
    "The SERVEROUTPUT setting controls whether SQL*Plus prints the output generated by the DBMS_OUTPUT package from PL/SQL procedures.
    By default, SQL*Plus doesn’t display output from PL/SQL. The following example shows this:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> BEGIN
      2    DBMS_OUTPUT.PUT_LINE('Hello World');
      3  END;
      4  /
    PL/SQL procedure successfully completed."
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 98
    Points : 64
    Points
    64
    Par défaut
    Désolé pour le retard.
    J'ai ajouter la commnde:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dbms_output.enable();
    avant le premier SELECT. Mais c'est pareil.

  9. #9
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    La solution est de mettre avant ton message :
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  10. #10
    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
    Non, SET SERVEROUTPUT ON, qui est une commande SQL*Plus, n'est pas adapté ici.
    En effet, dès que l'on se reconnecte, les paramètres SQL*Plus, et en particulier SERVEROUTPUT, reprennent leur valeur par défaut.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SCOTT@ORA122DX> set serveroutput on
    SCOTT@ORA122DX> show serveroutput
    serveroutput ON SIZE UNLIMITED FORMAT WORD_WRAPPED
    
    
    SCOTT@ORA122DX> connect scott/tiger
    Connecté.
    SCOTT@ORA122DX> show serveroutput
    serveroutput OFF
    C'est donc bien DBMS_OUTPUT.ENABLE qu'il faut utiliser, car il s'agit d'une commande PL/SQL et non d'un paramètre SQL*Plus, et elle va pouvoir être effective dans le déclencheur.
    Par contre, je n'ai pas connaissance que ça puisse fonctionner dans un déclencheur ON DATABASE. Avec le mode ON SCHEMA, oui.
    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

  11. #11
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Pas sympa de mettre un -1
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 98
    Points : 64
    Points
    64
    Par défaut
    Bonsoir.
    Merci encore pour vos réponses.
    J'ai modifié le code en remplaçant ON DATABASE par ON SCHEMA, et c'est pareil malgré la présence de DBMS_OUTPUT.enable();.

Discussions similaires

  1. Réponses: 8
    Dernier message: 23/05/2017, 16h16
  2. Gestion de session utilisateur après connexion
    Par frodomo dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 24/07/2016, 17h26
  3. Réponses: 3
    Dernier message: 01/02/2015, 00h40
  4. Réponses: 2
    Dernier message: 30/04/2008, 10h16
  5. [POO] afficher un message d'erreur après passage dans une BD
    Par paolo2002 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/04/2008, 16h04

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