[英]Oracle SQL Developer “table or view does not exist”
我是sql開發人員的新手,我知道有人問過這個問題,並且回答了無數次,但我沒有找到我需要的答案。 我知道這是非常基本的,但是我在任何地方都找不到。 這是我的小代碼:
SELECT *
FROM CITY;
非常簡單,但是“ city”是我自己創建的用戶表(稱為parking_places)(位於System下)。 現在,如果我嘗試吃午餐,則會出現以下錯誤:
- 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中的數據庫圖標並瀏覽要使用的架構來更改架構。
如果要從另一個架構中進行選擇,則存在另一個選項,您可以使用工作台:
/ sqldev:stmt / SET CURRENT SCHEMA ='BLAH';
例如,請參見下面的imgur。
對於該工作表連接的其余部分,這會將所有對象默認設置為所討論的模式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.