Oracle SQL Developer"表或视图不存在"

时间:2015-10-11 16:40:38

标签: sql oracle privileges

我是sql开发人员的新手,我知道这个问题已被提出并且回答了很多次,但我没有找到我需要的答案。我知道它非常基本,但我无法在任何地方找到它。所以这是我的小代码:

SELECT *
FROM CITY;

非常简单,但" city"是我自己创建的用户(称为parking_places)的表(它在系统下)。现在,如果我尝试午餐,我会收到以下错误:

  
      
  1. 00000 - "表或视图不存在"
  2.         

    *原因:
      *操作:

         

    行错误:163列:6

我想出来,如果我写:

SELECT *
FROM PARKING_PLACES.CITY ;

我得到了预期的结果。现在重点是,我希望每次使用表时都不要写用户名,在网上浏览我发现特权问题(至少我理解),现在我如何给用户parking_places它需要做我想要的特权?或者它不是特权问题?

我已经尝试了

GRANT RESOURCE to parking_places;

代码似乎有效,但似乎也不是我需要的。

如果可能的话,我会更喜欢使用代码而不是使用GUI的程序作为回答,非常感谢!

4 个答案:

答案 0 :(得分:3)

要在不指定架构的情况下访问表,您在Oracle数据库中有4个选项:

a)您以表格所在的架构登录。这是非常常见的事情,因为通常您只有一个用户。它的缺点是您的运行时用户实际上是表的所有者,因此不能限制访问。

b)您授权您的用户或每个人访问该表并在PUBLIC中添加同义词。伪模式。 CREATE PUBLIC SYNONYM yourtable FOR owner.yourtable;。这会使公共空间变得混乱,并且需要sys权限。

c)您授予您的用户或每个人访问该表的权限,并在运行时用户的架构中添加同义词或视图。这不会使公共空间变得混乱,但需要为每个“运行时”用户添加/维护它。

d)以这种方式使用ALTER SESSION SET CURRENT_SCHEMA=owner;所有后来的非限定表访问都将使用备用模式。当您有运行时用户访问安装用户拥有的架构时,通常会使用此方法。您可以将alter session添加为登录触发器,这样您就不需要在应用程序中执行此操作。

答案 1 :(得分:1)

ALTER SESSION ... oracle-docs ..是sql server和mysql中use database-name的equvalnet。

使用ALTER SESSION语句设置或修改影响与数据库连接的任何条件或参数。在您断开与数据库的连接之前,该语句将一直有效。

为此,在脚本中的某处添加一行并执行它。或者只是从sql开发人员那里执行,如果你正在这样做的话。

  alter session set current_schema =  PARKING_PLACES; 

该会话将与该用户建立连接,您无需在后续sql statements中明确提及用户名:

SELECT  * FROM CITY;

P.S:你也可以通过右键单击sql developer中的数据库图标并浏览你想要使用的模式来更改模式。

答案 2 :(得分:0)

授予选择权限

 GRANT SELECT ON TABLE yourtable to public;

您也可以为特定用户授予权限。

see this link for granting privileges

答案 3 :(得分:0)

如果您想从另一个架构中进行选择,则可以使用另一个选项:您有权使用工作台:

/ sqldev:stmt / SET CURRENT SCHEMA ='BLAH';

例如,见下面的imgur。

这将用于该工作表连接的其余部分,默认为相关模式的所有对象。

http://imgur.com/RMsWtIH