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

PL/SQL Oracle Discussion :

[Trigger] comparer chaine de caractères


Sujet :

PL/SQL Oracle

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Points : 210
    Points
    210
    Par défaut [Trigger] comparer chaine de caractères
    Bonjour,

    j'ai créé le trigger suivant qui, à la création d'une table/vue dans le schéma CADASTRE, "grant" le droit SELECT au rôle CADASTRE_CONSULT sur cette table/vue :

    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
    CREATE OR REPLACE TRIGGER do_grant
    after CREATE ON schema
    declare
        l_str varchar2(255);
        l_job number;
    begin
        IF ( ora_dict_obj_type = 'TABLE' )
        then
            l_str := 'execute immediate "grant select on ' ||
                                         ora_dict_obj_name ||
                                        ' to CADASTRE_CONSULT";';
            dbms_job.submit( l_job, REPLACE(l_str,'"','''') );
        elsif ( ora_dict_obj_type = 'VIEW' )
        then
            l_str := 'execute immediate "grant select on ' ||
                                         ora_dict_obj_name ||
                                        ' to CADASTRE_CONSULT";';
            dbms_job.submit( l_job, REPLACE(l_str,'"','''') );
        end IF;
    end;

    Je cherche aujourd'hui à pouvoir différencier certaines tables/vues. Je voudrais par exemple attribuer les tables qui commencent par EDI_ aux rôles CADASTRE_CONSULT et CADASTRE_CONSULT_EDI et celles qui commencent par DGI_ au rôle CADASTRE_CONSULT uniquement.

    Je voudrais faire quelques chose du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    si (ora_dict_obj_name contient/commence par EDI_) alors
    Grant Select on ora_dict_obj_name to CADASTRE_CONSULT AND  CADASTRE_CONSULT_EDI
    sinon
    Grant Select on ora_dict_obj_name to CADASTRE_CONSULT
    finsi
    C'est la comparaison de chaines de caractère en PL/SQL dans la condition que je ne sais pas réaliser. Pouvez-vous m'aider svp ?

    Merci pour vos réponses.

  2. #2
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Instr, SubStr, Like, expression régulière vous n’avez que l'embarras du choix.

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Points : 210
    Points
    210
    Par défaut
    Je ne connais encore que très peu PL/SQL donc pas facile de trouver ce qu'il me faut du premier coup. En l'occurrence, tu m'as bien aidé pour le coup puisque ça fonctionne, voici ce que j'ai fait :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    CREATE OR REPLACE TRIGGER do_grant
    after CREATE ON schema
    declare
        l_str varchar2(255);
        l_job number;
    begin
    	IF ( INSTR(ora_dict_obj_name,'EDI_') = '1' )
    	then
        		IF ( ora_dict_obj_type = 'TABLE' )
    		then
    			l_str := 'execute immediate "grant select on ' || ora_dict_obj_name || ' to CADASTRE_CONSULT";';
    			dbms_job.submit( l_job, REPLACE(l_str,'"','''') );
    			l_str := 'execute immediate "grant select on ' || ora_dict_obj_name || ' to CADASTRE_CONSULT_EDI";';
            		dbms_job.submit( l_job, REPLACE(l_str,'"','''') );
        		elsif ( ora_dict_obj_type = 'VIEW' )
        		then
            		l_str := 'execute immediate "grant select on ' || ora_dict_obj_name || ' to CADASTRE_CONSULT";';
    		        dbms_job.submit( l_job, REPLACE(l_str,'"','''') );
    			l_str := 'execute immediate "grant select on ' || ora_dict_obj_name || ' to CADASTRE_CONSULT_EDI";';
    		        dbms_job.submit( l_job, REPLACE(l_str,'"','''') );
    		end IF;
    	else
    		IF ( ora_dict_obj_type = 'TABLE' )
    		then
    			l_str := 'execute immediate "grant select on ' || ora_dict_obj_name || ' to CADASTRE_CONSULT";';
    			dbms_job.submit( l_job, REPLACE(l_str,'"','''') );
        		elsif ( ora_dict_obj_type = 'VIEW' )
        		then
    			l_str := 'execute immediate "grant select on ' || ora_dict_obj_name || ' to CADASTRE_CONSULT";';
    			dbms_job.submit( l_job, REPLACE(l_str,'"','''') );
        		end IF;
    	end IF;
    end;
    Merci.

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

Discussions similaires

  1. Comparer la chaine de caractère de deux cellules différentes
    Par idir.17 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 21/03/2007, 14h48
  2. Réponses: 4
    Dernier message: 08/09/2006, 09h41
  3. Comparer deux chaines de caractères dans un if ?
    Par Xplosif² dans le forum C++
    Réponses: 6
    Dernier message: 25/02/2006, 19h21
  4. comparer deux chaines de caractères
    Par peuf23 dans le forum Langage
    Réponses: 3
    Dernier message: 30/01/2006, 14h31
  5. Comparer 2 chaines de caractères
    Par arkem dans le forum Langage
    Réponses: 3
    Dernier message: 16/01/2006, 14h52

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