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.