0

J'essaie de créer une procédure qui accorde des droits à des objets de schéma spécifiques. La procédure semble bien se compiler, mais elle donne une erreur lors de l'exécution.Procédure donnant des droits, Erreur de nom de table invalide

Quelque chose ne va pas dans cette procédure simple mais je ne peux pas trouver la raison pour cela.

Procédure:

create or replace procedure ch.grants_to_schema_objects(
      i_target_schema varchar2, 
      i_target_user varchar2) as 
begin 
for mt in (SELECT 'GRANT SELECT ON ' || chr(39) 
       || i_target_schema || chr(39) 
       || '.' || TABLE_NAME || ' TO ' || chr(39) 
       || i_target_user || chr(39) 
       || ' WITH GRANT OPTION' as grnt 
      FROM ALL_TABLES 
      WHERE OWNER = i_target_schema) loop 
    dbms_output.put_line(mt.grnt); 
    execute immediate mt.grnt; 
end loop; 
end; 

appel:

execute ch.grants_to_schema_objects('SR', 'CH'); 

Erreur:

ORA-06512: "CH.GRANTS_TO_SCHEMA_OBJECTS", line 5 
ORA-06512: line 1 
00903. 00000 - "invalid table name" 
*Cause:  
*Action: 
+5

pourquoi le chr (39)? Vous ne pouvez pas en avoir besoin. Vous avez peut-être besoin d'un double guillemet (") pour gérer les objets minuscules, le cas échéant – Aleksej

+0

Quelle est la sortie que vous obtenez immédiatement avant l'erreur (en supposant que vous avez' set serveroutput on') Que se passe-t-il lorsque vous exécutez manuellement? dit, les citations autour du schéma et les noms d'utilisateur ne sont pas corrects. –

Répondre

0

Le CHR(39) est cassant. Remplacez-le par CHR(34): c'est " vous devez séparer votre nom d'utilisateur, pas '.