在Oracle SQL中连接两个数据库



我需要你的帮助。我有两个数据库(例如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

相关内容

  • 没有找到相关文章

最新更新