2013-06-05 3 views
0

Oracle 10g. Я новичок в процедурах, поэтому, возможно, мне не хватает чего-то очевидного.Создание хранимой процедуры с таблицей из другой схемы. PLS-00201

У владельца схемы ABC есть таблица T2001_WRITEOFF. Сначала я предоставил SIUD для some_update_role и предоставил эту роль разработчику IJK. Затем пользователь IJK создал синоним T2001_WRITEOFF для ABC.T2001_WRITEOFF; Это работало с обычными командами SQL DML.

Однако я читал в другом месте здесь, что гранты через роль не работают в хранимых процедурах. Я отбросил синоним от IJK; затем из ABC, предоставил SIUD прямо в IJK. Из IJK работает обычный SQL DML.

Когда я пытаюсь создать простую процедуру следующим образом, он выдает идентификатор PLS-00201 «T2001_WRITEOFF», который должен быть объявлен, и указывает на вторую строку. Эта ошибка одинакова, если я использую гранты роли или нет.

create or replace procedure woof1(
    fooname in T2001_WRITEOFF.territory%TYPE, <=== error points here 
    bardesc IN T2001_WRITEOFF.ind_batch_submit%TYPE) IS 
BEGIN 
    INSERT into T2001_WRITEOFF 
    VALUES (fooname, bardesc); 
END woof1; 
/

Заранее спасибо за помощь

JimR

+2

Если вы упустили синоним 'T2001_WRITEOFF.territory% TYPE', это не сработает. Вместо этого попробуйте 'ABC.T2001_WRITEOFF.territory% TYPE'. – Toru

+0

Нет, извините, те же результаты. – JimR

ответ

0

Для того, чтобы сделать роль право применимо в хранимых процедурах, вы можете захотеть взглянуть на authid current_user в oracle documentation. Также полезно: http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/subprograms.htm#LNPLS682

+0

Нет, извините, попробовал authid current_user, а также определитель authid, но оба произвели ту же ошибку. – JimR

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