簡體   English   中英

Oracle SQL Developer“表或視圖不存在”

[英]Oracle SQL Developer “table or view does not exist”

我是sql開發人員的新手,我知道有人問過這個問題,並且回答了無數次,但我沒有找到我需要的答案。 我知道這是非常基本的,但是我在任何地方都找不到。 這是我的小代碼:

SELECT *
FROM CITY;

非常簡單,但是“ city”是我自己創建的用戶表(稱為parking_places)(位於System下)。 現在,如果我嘗試吃午餐,則會出現以下錯誤:

  1. 00000-“表或視圖不存在”

*原因:
*行動:

錯誤在行:163列:6

我發現如果我寫:

SELECT *
FROM PARKING_PLACES.CITY ;

我得到了預期的結果。 現在的要點是,我不希望每次使用表時都不要寫用戶名,在Web上環顧四周,我發現這是一個特權問題(至少據我所知),現在我如何為用戶提供parking_places特權它需要做我想要的嗎? 還是不是特權問題?

我已經試過了

GRANT RESOURCE to parking_places;

該代碼似乎可以工作,但是這似乎也不是我所需要的。

如果可能的話,我更喜歡使用代碼而不是使用GUI作為應答的過程,非常感謝!

要在不指定模式的情況下訪問表,Oracle數據庫中有4個選項:

a)您以表所在的模式登錄。 這是很常見的事情,因為通常您只有一個用戶。 它確實有一個缺點,即您的運行時用戶實際上是表的所有者,因此不能限制訪問。

b)您授予用戶或每個人對該表的訪問權限,並在PUBLIC中添加同義詞。 偽模式。 CREATE PUBLIC SYNONYM yourtable FOR owner.yourtable; 這會使公共空間混亂,並且需要sys權限。

c)您授予您的用戶或所有人對表的訪問權限,並在運行時用戶的架構中添加同義詞或視圖。 這不會使公共空間混亂,但是需要為每個“運行時”用戶添加/維護它。

d)您使用ALTER SESSION SET CURRENT_SCHEMA=owner; 這樣,以后所有不合格的表訪問都將使用備用模式。 當您有運行時用戶訪問安裝用戶擁有的架構時,通常會使用此功能。 您可以將alter session添加為登錄觸發器,因此無需在應用程序中進行操作。

ALTER SESSION ... oracle-docs ..是在sql服務器和mysql中use database-name的等效項。

使用ALTER SESSION語句來設置或修改任何影響您與數據庫連接的條件或參數。 該語句將一直有效,直到您與數據庫斷開連接。

為此,請在腳本中的某處添加這一行並執行。 或者,如果您正在執行此操作,則直接從sql developer中執行。

  alter session set current_schema =  PARKING_PLACES; 

會話將為該用戶連接,您將不必在后續的sql statements明確提及用戶名:

SELECT  * FROM CITY;

PS:您還可以通過右鍵單擊sql developer中的數據庫圖標並瀏覽要使用的架構來更改架構。

授予選擇權限,

 GRANT SELECT ON TABLE yourtable to public;

您還可以為特定用戶賦予特權。

請參閱此鏈接以授予特權

如果要從另一個架構中進行選擇,則存在另一個選項,您可以使用工作台:

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

例如,請參見下面的imgur。

對於該工作表連接的其余部分,這會將所有對象默認設置為所討論的模式。

http://imgur.com/RMsWtIH

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM