0

我运行了这些语句:

create table SAMPLE(
     ID INT
     );
     
INSERT INTO SAMPLE VALUES(1);
COMMIT;

GRANT INSERT, SELECT, UPDATE, DELETE ON SAMPLE TO NEWLEC;
COMMIT;

但 Eclipse 说找不到表。

在此处输入图像描述

我该如何解决?

4

1 回答 1

2

您以newlec用户身份连接,对表的非限定引用将在架构中查找它们,而不是在其他用户下。

您可以限定表名:

SELECT * FROM real_owner.SAMPLE

例如,如果您在创建表时连接为 HR,您将执行以下操作:

SELECT * FROM HR.SAMPLE

您还可以创建一个公开的同义词,这可能有点矫枉过正,并可能导致其他问题和混乱;newlec或为指向 rea 表的用户创建一个私有同义词,例如:

CREATE SYNONYM SAMPLE FOR real_owner.SAMPLE;
SELECT * FROM SAMPLE;

所以不合格的查询现在看到了同义词,并通过它看到了其他人拥有的真实表。或者您可以设置您的current_schema登录后:

ALTER SESSION SET CURRENT_SCHEMA=real_owner;
SELECT * FROM SAMPLE;

所以所有不合格的查询现在都看到该用户拥有的对象,而不是newlec.

但是,如果这是初学者课程的基本作业,那么您可能只需要限定名称。

于 2021-09-06T16:30:55.333 回答