0

Я пытаюсь создать процедуру, которая предоставляет гранты конкретным объектам схемы. Процедура, похоже, компилируется нормально, но при выполнении она выдает ошибку.Процедура, которая дает гранты, Ошибка имени недопустимой таблицы

Что-то не так в этой простой процедуре, но я не могу найти причину этого.

Процедура:

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; 

вызов:

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

Ошибка:

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

Почему хр (39)? Возможно, вам это не понадобится. Возможно, вам понадобится двойная кавычка (") для обработки объектов нижнего регистра, если они есть – Aleksej

+0

. Каков результат, который вы получаете непосредственно перед ошибкой (если у вас есть' set serveroutput on')? Что происходит, когда вы запускаете это вручную? Как Aleksej сказал, что цитаты вокруг схемы и имена пользователей неверны. –

ответ

0

CHR(39) ломает его. Замените его whit CHR(34): это " вам нужно отделить свое имя пользователя, а не '.

 Смежные вопросы

  • Нет связанных вопросов^_^