То, что вы называете «базой данных», является «пользователем» в Oracle.
Вы сказали, что это не работает, когда вы подключены как PAPER
:
SELECT SUPPLIER_NAME
FROM PAPER.ORDER AS A
INNER JOIN PEN.PEN.ORDER AS B
ON A.SUPPLIER_ID=B.SUPPLIER_ID
Имя таблицы в db PEN - PEN.ORDER. Имя таблицы в db PAPER - PAPER.ORDER.
Если вы хотите иметь возможность получать данные, принадлежащие другому пользователю (в данном случае PEN
), владелец таблицы должен предоставить вам (при минимум) SELECT
привилегия на свою таблицу. Итак: подключитесь как PEN
и запустите
grant select on order to paper;
Затем снова подключитесь как PAPER
и выполните
select a.supplier_name
from order a join pen.order b on a.supplier_id = b.supplier_id;
Обратите внимание на несколько изменений, которые я сделал:
PEN
таблице предшествует имя владельца, только один раз (это не pen.pen.order
но pen.order
)
Однако : что-то странное в ваших таблицах. order
является недопустимым именем в Oracle:
SQL> create table order (id number);
create table order (id number)
*
ERROR at line 1:
ORA-00903: invalid table name
Если оно действительно использовало это имя, то оно было создано с двойными кавычками, например,
SQL> create table "order" (id number);
Table created.
Но вы не может выбрать из него просто так :
SQL> select * From order;
select * From order
*
ERROR at line 1:
ORA-00903: invalid table name
Нет - вы должны использовать двойные кавычки, всегда, соответствующие регистру букв, всегда:
SQL> select * From "order";
no rows selected
Предложение: не используйте зарезервированные / ключевые слова для имен объектов. Никогда не используйте двойные кавычки в Oracle, никогда (не то, чтобы это не работало - это будет, как вы видите, но это действительно больно).