Я видел какое-то странное поведение и пытался повторить с помощью простого и глупого кода.Это о создании синонимов.У меня есть сценарий Oracle 11g:
begin
execute immediate 'drop view user1.v1';
exception
when others then
null;
end;
/
begin
execute immediate 'drop view user1.v2';
exception
when others then
null;
end;
/
begin
execute immediate 'drop public synonym v1';
exception
when others then
null;
end;
/
begin
execute immediate 'drop public synonym v2';
exception
when others then
null;
end;
В приведенном выше фрагменте предполагается удалить любой связанный объект.Чтобы гарантировать это, я запросил select o.* from all_objects o where o.object_name = 'V1' or o.object_name = 'V2'
(давайте назовем этот запрос Q1), и он ничего не возвратил, хорошо.Затем я запустил это:
create or replace force view user1.v1 as
select * from dual;
create or replace force view user1.v2 as
select v1.dummy || '2' as new_dummy from v1;
Используя Q1, я получил два правильных представления, как и должно быть.Я проверил select * from v1,v2
(Q2), чтобы проверить.Это тоже было нормально.
Но все это было зарегистрировано как пользователь user1, попытка Q2 с user2, очевидно, вернула ORA-00942: table or view does not exist
.Затем я хотел создать для него синонимы:
begin
execute immediate 'create public synonym v1 for user1.v1';
end;
/
begin
execute immediate 'create public synonym v2 for user1.v2';
end;
Я хотел удалить любой объект или синоним, связанный с v1
и v2
, затем создать их, протестировать их и, наконец, создать некоторые общедоступные синонимы для глобальныхиспользование.После их создания я получил ошибку в заголовке.Я сделал select * from dba_users
и увидел, что user1 имеет EDITIONS_ENABLED
как Y
.Все это прекрасно работало у разработчиков других баз данных.Что я могу настроить, чтобы добиться этого?