![](/img/trans.png)
[英]Entity Framework 5 with Oracle table/view doesn't exist inconsistency?
[英]My Oracle view uses a table that doesn't exist, but I can still query it
我有一個Oracle視圖,它使用我在任何地方都找不到的表。 但是,我仍然可以查詢視圖,我認為這是不可能的。
視圖內容是否緩存在某個地方,從表格仍然存在的時候開始,還是我對表格看起來不夠努力?
為了清楚起見:我已經查看了ALL_TABLES和ALL_OBJECTS,並且表中(或其他任何內容)都沒有出現。
這很有可能。在視圖上授予select不會在基礎表上授予select。 這允許我創建一個視圖,從表中公開一些我不希望你看到的列。 您必須具有對表的訪問權限才能在ALL_TABLES視圖中顯示它。 如果它確實是一個表,您應該能夠在DBA_TABLES視圖中找到它(假設您可以訪問DBA_TABLES視圖),該視圖包含所有內容,而不僅僅是您的用戶擁有權限的表。
事實上,ALL_TABLES視圖就是這種情況的完美例子。 我打賭你也找不到該視圖中使用的表,因為你可能沒有它所基於的SYS表的權限(例如SYS.user $,SYS.obj $等)。
還要檢查“缺失”表是否實際上是同義詞:
SELECT table_owner, table_name
FROM all_synonyms
WHERE table_name = 'MISSING_TABLE';
如果它不是同義詞,請嘗試查看表的all_tables字典視圖:
SELECT owner, table_name
FROM all_tables
WHERE table_name = 'MISSING_TABLE';
檢查視圖中找不到的表引用的架構 - 它可能不是當前架構,但當前架構在特定表上具有SELECT權限(至少)。
一旦了解了架構,它就應該有助於確定該表是否實際上是當前架構中的一個視圖。 或者它可以是同義詞,它存在於當前模式中 - 與所有模式中的公共同義詞相同,因此您必須檢查同義詞以查看其指向的位置。
這可能是物化觀點嗎? 這是數據的副本,因此即使刪除了基表,它也會繼續存在。
我會確保你沒有說出來
Create Table "TableName"
("ColumnName" Number(10,0))....
如果您嘗試使用以下腳本引用這些:
Select ColumnName from TableName....
它不會工作。 這是因為Oracle使用不帶引號的名稱(如TableName)並將它們轉換為TABLENAME而不存在,因為當您使用“TableName”聲明它時,您實際上說“只響應具有此引號的具有此確切大小寫的查詢 ”
所以以下內容會起作用:
Select "ColumnName" from "TableName"....
但基本上你不應該使用區分大小寫的定義,因為它們需要引用每個查詢。
相反
Create Table TableName
(ColumnName Number(10,0))....
並且它會響應您在查詢時使用的任何大小寫
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.