Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/12/2011, 10h50   #1
Membre habitué
 
Homme
Administrateur de base de données
Inscription : mars 2005
Messages : 264
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : mars 2005
Messages : 264
Points : 121
Points : 121
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 :
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 :
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.
tck-lt est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 06/12/2011, 11h12   #2
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 313
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 313
Points : 5 819
Points : 5 819
Instr, SubStr, Like, expression régulière vous n’avez que l'embarras du choix.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 12h03   #3
Membre habitué
 
Homme
Administrateur de base de données
Inscription : mars 2005
Messages : 264
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : mars 2005
Messages : 264
Points : 121
Points : 121
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 :
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.
tck-lt est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h46.


 
 
 
 
Partenaires

Hébergement Web