Я могу подумать о некоторых различных топологиях, которые могут вызвать эту проблему, - и я начну с самого простого объяснения, которое я могу придумать первым.
Если у вас есть таблицы и ваш код (пакеты) на схеме A.
С учетом следующих тестовых объектов
create table tst_table(tst_val int);
create or replace package tst_pkg as
procedure tst_insert;
end tst_pkg;
/
create or replace package body tst_pkg as
procedure tst_insert as
begin
insert into tst_table (tst_val) values (44);
end;
end tst_pkg;
/
Вы можете предоставить выполнение в tst_pkg другомупользователь aka schema B и этот другой пользователь смогут использовать процедуру tst_insert - следующим образом
SQL> exec iasim.tst_pkg.tst_insert;
PL/SQL procedure successfully completed.
Но - если у вас есть эта топология и вам нужно определить свой пакет, используя "authid current_user" - тогдапредоставленное выполнение больше не является достаточным.
Если вы измените определение своего пакета на
create or replace package tst_pkg authid current_user as
procedure tst_insert;
end tst_pkg;
/
Вы получите эту ошибку при попытке выполнить процедуру
SQL> exec iasim.tst_pkg.tst_insert;
BEGIN iasim.tst_pkg.tst_insert; END;
*
ERROR at line 1:
ORA-00942: table or view does not exist
ORA-06512: at "IASIM.TST_PKG", line 4
ORA-06512: at line 1
Так что - если это такВы должны просто скомпилировать ваш пакет без "authid current_user" и предоставить пользователю привилегию исполнения - которая является привилегиями, необходимыми для вставки строк в tst_table, в моем примере, если это сделано с помощью процедуры в test_pkg.
Пожалуйста, дайте мне знать, если это поможет или вы расставили кусочки по-другому.