ORACLE11g, таблица или представление не существуют при создании процедуры

В db есть две схемы, я создаю материализованное представление — «MV1» и успешно предоставляю его, выбор из него в другой схеме — это нормально.

GRANT select ON schemaA.MV_CA_REVENU_MS_GEO TO read;
/
GRANT select ON schemaA.MV_CA_REVENU_MS_GEO TO write;
/
GRANT update ON schemaA.MV_CA_REVENU_MS_GEO TO write;
/

Но при компиляции процедуры появляется сообщение об ошибке: «таблица или представление не существует» для «MV1». Код процедуры:

create or replace 
PROCEDURE                     SP_NAME (args ... ) is
  .
  .
begin
    INSERT INTO tableName(
        .
        .
      ) SELECT ...
          FROM (SELECT ...
                  FROM MV1  -- **schemaA.MV1 doesn't work either** 
                 WHERE 
end SP_NAME;
/
GRANT EXECUTE ON schemaB.SP_NAME TO read;
GRANT DEBUG ON schemaB.SP_NAME TO read;
GRANT EXECUTE ON schemaB.SP_NAME TO write;
GRANT DEBUG ON schemaB.SP_NAME TO write;
/
CREATE or replace PUBLIC SYNONYM SP_NAME FOR schemaB.SP_NAME;
/

Я пытаюсь добавить schemaA перед MV1, это не работает. Есть ли какой-либо другой шаг, который я должен сделать, чтобы проверить?


person user3567601    schedule 24.04.2014    source источник
comment
Я предполагаю, что это та же проблема, что и stackoverflow.com/questions/8599393/ . Так что просто проверьте решение там. Вам нужно использовать прямые гранты вместо ролей.   -  person Nickolay Komar    schedule 24.04.2014
comment
Да будет так! Извините за мою оплошность и спасибо.   -  person user3567601    schedule 24.04.2014


Ответы (1)


Являются ли «чтение» и «запись» именами схем или именами ролей? Разрешения в Oracle, предоставленные косвенно через роли, недоступны при компиляции хранимых процедур, функций и пакетов.

person Rene    schedule 24.04.2014