我需要你的帮助。我有两个数据库(例如PEN和PAPER(,它们的表需要连接。数据库PEN中的表名为PEN.ORDER。数据库PAPER中的表名称为PAPER.ORDER.
在PAPER数据库中,我正在进行
SELECT SUPPLIER_NAME
FROM PAPER.ORDER AS A
INNER JOIN PEN.PEN.ORDER AS B
ON A.SUPPLIER_ID=B.SUPPLIER_ID
它看不到PEN数据库中的表。试着写笔会。"PEN.ORDERS"和PEN。[笔令]但无济于事。
但当我在不同的数据库中尝试类似的方法时,表名不包含点,效果非常好。在PAPER数据库中就像:
SELECT SUPPLIER_NUMBER
FROM PAPER.ORDER AS A
INNER JOIN BOOK.ORDERS AS B
ON A.SUPPLIER_NUMBER=B.SUPPLIER_NUMBER
在这里它起作用,因为BOOK数据库中的表名只是ORDERS,没有任何用点分隔的第二个单词。
在Oracle中,您所称的"数据库"就是"用户"。
你说当你连接为PAPER
:时,这不起作用
SELECT SUPPLIER_NAME
FROM PAPER.ORDER AS A
INNER JOIN PEN.PEN.ORDER AS B
ON A.SUPPLIER_ID=B.SUPPLIER_ID
数据库PEN中的表名为PEN.ORDER。数据库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;
注意我做的几个更改:
- 表的别名没有
as
关键字(不是order as a
而是order a
( 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中使用双引号(并不是说它不起作用——正如你所看到的,它会起作用,但这真的很痛苦(。
如果您的表在模式PEN中命名为PEN.ORDER,则将其用双引号括起来,如下所示。此外,从表Alias 中删除AS
SELECT A.SUPPLIER_NAME
FROM PAPER.ORDER A
INNER JOIN PEN."PEN.ORDER" B
ON A.SUPPLIER_ID=B.SUPPLIER_ID